这个程序是一组人循环报数,报到3的退出,求最后剩下的那个人是第几号,改了好多次都调试不成功。所以来请教各位前辈们。谢谢。
//报数,报到3的退出,求最后剩下的成员序数
#include
void function(int *a, int n)
{
int i = 0, k = 1;
while (n > 1)
{
while (1)
{
if ( (a[i] != '\0') && (k != 3) && (a[i] != 0) )
{
i++;
k++;
}//end-if
else break;
}//end-while
if (a[i] == '\0') i = 0;
else if (a[i] == n+1) i++;
else if (k == 3)
{
a[i] = n;
k = 1;
i++;
n--;
}
}
}
/*-----------------------------------------------------------*/
int main(void)
{
int a[100];
int i, n;
printf("amount : ");
scanf("%d", &n);
for (i = 0; i < n; i++) a[i] = 1;
function(a, n);
for (i = 0; i < n; i++)
{
printf("The remaining amount is %d.\n", a[i]);
}
return 0;
}
看不明白 你写的程序不对
for (i = 0; i < n; i++) a[i] = 1; 这个是数组里面全是1,成员全是1,后面在用的时候就不明白了
你可以直接写一个循环 让=3的a【i】的后面的往前提(for 循环 镶嵌 ) 我想到的是这些 你试试吧
看不懂你的想法。
想了一个方法。写出一个结构
struct person{
int num; //表示自己报的数
bool islive; //表示自己是否还活着,默认true,数到数字含3的都设置成false
}
int Lastnum = 1; //从1开始数 每次数到一个不含3的数,都修改Lastnum值为新值
bool check( person * p ){ …… } 定义方法检测 是否所有person 的islive 都是false,若是return true,否则 return false;
只有的那个check返回true时候,Lastnum的值是你要的值
void function(int *a, int n)
{
int i = 0, k = 1;
while (n > 1)
{
while (1)
{
if ( (a[i] != '\0') && (k != 3) && (a[i] != 0) )
{
i++;
k++;
}//end-if
else break;
}//end-while
if (a[i] == '\0') i = 0;
else if (a[i] == n+1) i++;
else if (k == 3)
{
a[i] = n;
k = 1;
i++;
n--;
}
}
}
void main()
{
int a[100];
int i, n;
printf("amount : \n");
scanf("%d", &n);
for (i = 0; i < n; i++) a[i] = 1;
function(a, n);
for (i = 0; i < n; i++)
{
printf("The remaining amount is %d.\n", a[i]);
}
}
我并不知道你的程序运算出来的结果是否正确,这个能运行