有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3),凡是报到3的人退出,问最后留下的是原来第几号的那位?
函数接口定义:
void countAndOut(int array[],int n); //array用来存放人的编号,从1开始编号;n为人数
裁判测试程序样例:
#include <stdio.h>
int main()
{
void countAndOut(int *,int);
int i,n,num[50];
//printf("\ninput number of person: n=");
scanf("%d",&n); //输入人数,不超过50
for(i=0;i<n;i++)
num[i]=i+1;
countAndOut(num,n);
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
5
输出样例:
输出格式如下:
The last one is NO.4
参考代码:
void countAndOut(int array[], int n)
{
int i = 0, k = 0;
int tem = n;
while (n > 1)
{
if (array[i] != -1)
k++;
if (k == 3)
{
array[i] = -1;
k = 0;
n--;
}
i++;
if (tem == i)
i = 0;
}
i = 0;
while (array[i] < 0)
i++;
printf("The last one is NO.%d",array[i]);
}