求做一个C语言题目

2025-03-22 03:35:01
推荐回答(1个)
回答1:

#include
#define COUNT 4
/*人的数目可在此更改*/
/*
功能:计算出最后剩余的人的编号,从0到count-1
参数:peopele[] : 存放人的数组
Count : 共有多少个人
Now : 当前数到了几,从0开始,不断往上增加
Left : 当前还剩下几人没’离开’,范围为1-count
返回:返回值为最后剩余的人的编号,从0到count-1
*/
int func(int people[], int count, int now, int left) {
if (left <= 1) {
/*如果只剩下一个人没走开,但now当前标识的元素可能值为0,故要寻找从
now开始的第一个值不为0的元素*/
for (;people[now%count]==0;now++);
/*返回该编号*/
return now%count;
}
else {
/*如果还剩下1人以上,则往下数三个值还不为0的元素*/
/*i用来标识是否数了三个*/
int i = 0;
for (;i<3;now++)
/*不论数到的元素值是否为0,now都要增加1,但i则需要元素值不为0才能增加1*/
people[now%count] == 0 ?i :i++ ;
/*将第三人设为0表示已走开*/
people[(now-1)%count] = 0;
/*还没’离开’的人数减1*/
left--;
/*开始新的递归*/
return func(people,count,now,left);
}
}
/*功能:调用递归函数func()*/
void main()
{
/*初始化人的数组,编号从0开始,到count-1*/
int people[COUNT];
int i;
/*各元素初始值为1,表示都未离开*/
for (i=0; ipeople=1;
/*输出计算结果,因为编号从0开始,故输出时加1*/
/*输出计算结果,因为编号从0开始,但是到COUNT时结束的,故输出时不加1*/
printf ("%d\n",func(people,COUNT,1,COUNT));
}