1. 题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成
1 | 2 | 3 | 1 | 2 | 3 | 1 | 2 | 3 | 1 |
2 | 3 | 1 | 2 | 3 | 1 | 2 | |||
3 | 1 | 2 | 3 | 1 | |||||
2 | 3 | 1 | |||||||
2 | 3 | ||||||||
1 |
围成一个圈报数 报到3的退出,假设10个人 我用表格的形式描述了一下题目的意思(表格s形来读)
用数组来完成这题,我们首先需要让这10个数进入数组,让数组中值等于3 的数为0,下面是具体的编程:
#include <stdio.h>
int func(int n)
{
int group[1000];
int i,nn,sum = 0;
nn = n;
for(i = 0;i < n;i++)
group[i] = i + 1; //让n个人进数组
for(i = 0;;i++)
{
if(i == n) //一轮循环结束后让i重新为0
i=0;
if(group[i] != 0)
sum ++ ;
else
continue;
if(sum % 3 == 0) //1 2 3 当报数到3时给这个元素赋值为0
{
group[i] = 0;
nn--; // 总数减一
}
if(nn == 1) //当总数为一时退出
break;
}
for(i = 0;i < n;i++) //所有报数为3 的元素都被置为0 了现在打印出不为0的数也就是剩下的那个值
{
if(group[i] != 0)
return group[i];
}
}
int main()
{
int n;
int func(int n);
printf("please enter the number:\n");
scanf("%d",&n);
printf("the number left is :%d\n",func(n));
return 0;
}