有n个人围成一圈,顺序排号。从第1人开始报数(从1到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。用c语言指针处理...

我们可以使用一个指针来遍历这个圈中的每一个人,并计算报数。当报数到达3时,就将这个人从圈中删除,并继续遍历下一个人。我们可以使用一个循环来实现这个过程,并使用一个变量来记录剩余的人数。

例如,我们可以使用以下代码来实现这个过程:

#include <stdio.h>

int main(void) {
  int n = 10; // 圈中的人数
  int count = 0; // 计数器
  int *p = malloc(n * sizeof(int)); // 分配内存空间

  // 初始化每个人的编号
  for (int i = 0; i < n; i++) {
    p[i] = i + 1;
  }

  // 遍历圈中的每一个人
  for (int i = 0; i < n; i++) {
    count++; // 报数
    if (count == 3) { // 如果报数到达3
      count = 0; // 重置计数器
      p[i] = 0; // 删除这个人
      n--; // 剩余人数减1
    }
  }

  // 打印最后留下的人的编号
  for (int i = 0; i < n; i++) {
    if (p[i] != 0) {
      printf("%d\n", p[i]);
    }
  }

  free(p); // 释放内存空间

  return 0;
}

在这段代码中,我们使用了一个指针 p 来保存每一个人的编号,并使用两个循环遍历圈中的每一个人。在第一个循环中,我们使用计数器来记录报数,并在报数到达3时删除

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值