问题描述
- 请各位前辈看一下我这个程序错在哪里
-
这个程序是一组人循环报数,报到3的退出,求最后剩下的那个人是第几号,改了好多次都调试不成功。所以来请教各位前辈们。谢谢。
//报数,报到3的退出,求最后剩下的成员序数#include
void function(int *a, int n)
{
int i = 0, k = 1;while (n > 1) { while (1) { if ( (a[i] != '') && (k != 3) && (a[i] != 0) ) { i++; k++; }//end-if else break; }//end-while if (a[i] == '') 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] != '') && (k != 3) && (a[i] != 0) )
{
i++;
k++;
}//end-if
else break;
}//end-while
if (a[i] == '') 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]);
}
}
我并不知道你的程序运算出来的结果是否正确,这个能运行
解决方案四:
http://blog.csdn.net/xianfajushi/article/details/24846979