当前位置: 代码迷 >> C语言 >> 各位看看(出圈游戏)的代码
  详细解决方案

各位看看(出圈游戏)的代码

热度:462   发布时间:2006-01-20 22:17:00.0
各位看看(出圈游戏)的代码

#include<stdio.h>
void main()
{
char players[20][10];
int M,S,i,j,num;
int a[20];
printf("请输入参加出圈游戏人员名单:\n");
for(i=0;i<20;i++)
{
printf("第%d位:",i+1);
scanf("%s",players[i]);
if(players[i][0]=='!')break;
}
num=i;//参加游戏的人数
printf("请输入出圈数字:");
scanf("%d",&M);
printf("请输入起始位置:");
scanf("%d",&S);
printf("共有%d人参加游戏, 出圈数字是%d, 起始位置:%d(%s)\n",num,M,S,players[S-1]); for(i=0;i<num;i++)
a[i]=i+1;
printf("\n开始游戏...\n");
int k=1; //重这里开始就看不懂!!请各位帮帮忙解释一下是如何实现的
i=S-2 ;
while(1)
{
if(k>num)break;
for(j=0;j<M;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
printf("%s出圈!\n",players[i]);
a[i]=0;
k++;
}
printf("\n姓名为%s的小孩是胜利者!\n",players[i]);
}

搜索更多相关的解决方案: 游戏  代码  出圈  

----------------解决方案--------------------------------------------------------
我们来看这一句,这是核心的语句:
for(j=0;j<M;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
可以被简化成:
for(j=0;j<M;j++)
{
i=(i+1)%num;
}
i=i+1就是移动孩子头上的指针,因为给出的数字可能很大,所以一次循环可能不够,所以要取模。那么这个循环是怎么控制的呢?通过j,而我们知道M是给出的数字,j<M是在说要一直数到j=M,然后就可以出圈了。那么i从多少开始呢?前面有一句i=S-2,既然S是起始的位置为什么不是i=S呢?因为C数组是从0开始的
所以输入S,实际上值是S-1,而且条件是j<M所以,到j==M的时候,i就不能+1了,所以如果从S-1开始,出圈的孩子等于没有数数,因此S-1要往前推一个为S-2。


再来看看,为什么要写:
if(a[i]!=0) j++;
前面有一句 for(i=0;i<num;i++)a[i]=i+1;可见a[]储存的是每个孩子的号码;if(a[i]!=0)j++;这一句后面有一句a[i]=0;这是把出圈的孩子号码归零,所以出圈的人就不计算了,因此要写成if(a[i]!=0)j++;


那么k是什么呢?
我们可以看到游戏循环是while(1),也就是说是无穷的循环,那么怎么跳出呢?有一句if(k>num)break;它是与下面的k++;配合使用的,目的是控制循环。 具体说每出圈一次k++,k>num的时候就是全部人都出来的时候,也就是游戏结束的时候,最后一个出圈的[i]就是胜利的人。num的意义可由printf("共有%d人参加游戏, 出圈数字是%d, 起始位置:%d(%s)\n",num,M,S,players[S-1]);得知。


希望能有些帮助,如果说错了请指出来,谢了!








----------------解决方案--------------------------------------------------------
谢谢了:)

但还是有些地方不懂:
while(1)是什么意思?
1%7=1 只要前面的数小于7,它的模就是本身,那么i=(i+1)%num 和i=i+1有什么区别?我换了i=i+1运行的时候出现乱码,请问它们之间有什么区别吗?谢谢


----------------解决方案--------------------------------------------------------

while()括号里面是bool类型的数,如果是真则循环,否则结束。所以while(1)就是条件永远为真,所以一直循环下去。
如果小于7就没有区别,但是大于就会有,比如:1%7=1;8%7=1;所以如果i+1<num,那么i+1=(i+1)%num,但是大于就不一定了,数值是在循环,循环的上限是num。因为(i+1)%num可以包含i+1<num或者i+1>=num的情况,是完整的,所以直接程序中给出了(i+1)%num,如果写i=i+1那么i+1>num的情况就没有包含进去了。

[此贴子已经被作者于2006-1-21 1:05:39编辑过]


----------------解决方案--------------------------------------------------------
谢谢指教了!

:)


----------------解决方案--------------------------------------------------------
不要紧,我们互相学习!
读这种小程序,关键是搞清楚变量代表的意思,从main开始读,然后遇到函数调用,再读被调函数,总之要按照机器去思维。
----------------解决方案--------------------------------------------------------

我怎么觉得参加游戏的人数应该是(num+1)呢

我刚学C不久 不知道对不对呀。。


----------------解决方案--------------------------------------------------------

为什么?说说看


----------------解决方案--------------------------------------------------------


啊 我突然明白了 是 num 呵呵
----------------解决方案--------------------------------------------------------
  相关解决方案