已经帮你改好。
开始我只是在win-tc下改好后运行的,结果正确。但是为了严格起见,又在Dev-c++下运行,结果不对。由此得出,win-tc到底是老式16位编译器,对语法的检测远不如32位Dev-c++编译器严格。于是又重新改写一遍,并在这两个编译器中均运行通过。
本题的一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过,结果正确。
#include
#include
int main ()
{
int a[500],s,k,n,i,j,onlyamonkey=0;
printf("请输入猴子的数量和k的值(猴子的范围是<1-500>,k要大于1):");
scanf("%d,%d",&n,&k);
while(n<=0 || n>500)
{
printf("您输入的猴子数量有问题,请重新输入:");
scanf("%d",&n);
}
while(k<=1)
{
printf("你输入的k出错,请输入个大于1的数:");
scanf("%d",&k);
}
for(i=0;i
while(!(onlyamonkey))
{
for(i=1;i<=k;)
{if(j+i-1>n-1) j=j-n;/* 为了和下标一致,这里是j+i-1>n-1,而且是先判断是否出界再执行其它操作 */
if(a[j+i-1]==0) {j++;i--;}/* 若数组中有0元素,则i必须减1,以保持执行下面i++运算后i保持不变 */
if(i==k) a[j+k-1]=0; /* 因为有0元素时只是j加1,i应保持不变才能不会跳过一些元素而产生遗漏 */
i++;
}
j+=k;
if(j>n) j=j-n;
for(s=0,i=0;i
}
for(i=0;i
system("pause");
return 0;
}
-------------------------------------------------------------------
-------------------------------------------------------------------
说实话,这个程序思路不太清晰,给你个更好的参考,本人所写,有详细注释:
http://zhidao.baidu.com/question/77796518.html