n个人围成一圈,第一个开始报数(1-3),凡报数3退出。问最后留下的人是原来第几号?

#include <stdio.h>
int main()
{
   int i=0,j=0,k=0,n,x;
   int a[100];
   printf("please input a nu :");
   scanf("%d",&n);
   for (x=0 ; x<n ; x++)
   {
      a[x] = x+1;
   }
   while (n-k > 1)
   {
      if (a[i] != 0)
      {
         j++;
      }
      if (j == 3)
      {
         a[i] = 0;
         j = 0;
         k++;
      }
      if (i == n-1)
      {
         i = -1;
      }
 i++;
   }
   for (i=0 ; i<n ; i++)
   {
  if (a[i] != 0)
  {
  printf("%d\n",a[i]);
  }
   }
   return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这道题可以使用模拟的方法来解决。具体步骤如下: 1. 定义一个数组表示这n个人,数组中的元素可以用0或1来表示这个人是否已经退出圈子。 2. 定义一个指针变量,表示当前正在报数的人的下标,初始值为0。 3. 定义一个计数器变量,表示当前已经报出的数的个数,初始值为1。 4. 使用while循环,不断进行报数退出操作,直到只剩下一人为止。 5. 在while循环中,每次将指针变量向后移动一位,如果指针超过了数组的长度,则将其重新设为0。 6. 如果当前指向的人还没有退出圈子,则计数器加1。 7. 如果计数器的值为3,则将当前指向的人从数组中删除(即将其值设为1),并将计数器重置为1。 8. 最后只剩下一个人时,输出其在数组中的下标即可。 下面是Python代码的实现: ```python n = int(input("请输入人数:")) people = [0] * n pointer = 0 count = 1 while people.count(0) > 1: # 循环报数退出操作 pointer += 1 if pointer == n: pointer = 0 if people[pointer] == 0: count += 1 if count == 3: people[pointer] = 1 count = 0 print("最后留下的人的编是:", people.index(0) + 1) ``` 在上面的代码中,我们使用了列表的count方法来统计数组中0元素的个数,这样可以避免在每次循环中都遍历整个数组来判断是否还有人留在圈子里。同时,我们也使用了列表的index方法来找到最后留下的人在数组中的下标。需要注意的是,由于数组下标是从0开始的,因此输出时需要将其加1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值