| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖
标题:[求助]为什么这个程序的第二个while没有运行?
取消只看楼主 加入收藏
rejorcelife
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-26
收藏
 问题点数:0 回复次数:2 
[求助]为什么这个程序的第二个while没有运行?

/*题目:有n(n<100)个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出*/
#include "stdio.h"
count(int x)
{int i=0,j,k,m;
int a[100];
for(i=0;i<99;i++)
a[i]=0;
m=x;
while(m>=3)
{j=0;
for(i=0;i<x;i++)
if(a[i]==0)
{j++;
k=i+1;
if(j/3==1)
{a[i]=1;
m--;
j=0;
printf("the kicked man is the %dth\n",i+1);
}
}
}
getch():
while(i<x&&a[i]==0)
{printf("the left people is the %dth\n",i+1);
getch();
i++;
}
}
main()
{
int n;
printf("the total people is:");
scanf("%d",&n);
count(n);
}

基本思想:首先将给数组所有元素赋值0,在循环的过程中,如果被踢出去,则赋值1,最后判断剩下元素值为0的数则是所要求答案。
问题1:以输入10为例,the kicked man输出正确3、6、9、4、8、5、7、10;第二个while好像没有运行;
问题2:如果n没有限定,又如何写这个程序?

搜索更多相关主题的帖子: 运行 
2006-04-22 09:51
rejorcelife
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-26
收藏
得分:0 

count(int x)
{int i=0,j,k,m;
int a[50];
for(i=0;i<49;i++)/*将数组中所有值赋0*/
a[i]=0;
m=x;
j=0;
while(m!=1)
{for(i=0;i<x;i++)
if(a[i]==0)
{j++;
if(j/3==1)/*被踢出去的赋值1*/
{a[i]=1;
m--; /*同时m数减1表示剩下的未被踢的*/
j=0; /*再重新数3*/
printf("the kicked man is the %dth\n",i+1);
}
}
}
getch();
for(i=0;i<x;i++)
if(i<x&&a[i]==0)/*用以判断最后未被踢的是第几个*/
{printf("the left people is the %dth\n",i+1);
getch();
}
}
main()
{
int n;
printf("the total people is:");
scanf("%d",&n);
count(n);
}

2楼的:"最后应该只剩下1个人,怎么可以剩2个(因为是围成一圈)",一语惊醒梦中人,这是修改后的,这个就可以了,原来的判断语句while(i<x&&a[i]==0)本身就是个错误,结果还越陷越深,基本功不够扎实的缘故,还是要感谢你!


一直在努力!
2006-04-22 12:41
rejorcelife
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-26
收藏
得分:0 
问题2:如果n没有限定,又如何写这个程序?
这个问题还没解决,继续求教!

一直在努力!
2006-04-22 12:42
快速回复:[求助]为什么这个程序的第二个while没有运行?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011891 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved