| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1259 人关注过本帖, 1 人收藏
标题:[求助]大虾帮帮忙啊
取消只看楼主 加入收藏
treegrass
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-6-23
收藏(1)
 问题点数:0 回复次数:4 
[求助]大虾帮帮忙啊

main() {void joseph(int,char*,int,int); char s[]={'1','2','3','4','5','6','7','8','9','10','11','12','13'}; joseph(13,s,1,3); }

void joseph(int n,char*a,int t1,int k) {int t2,i; while(n) {t2=t1+k-1; t2=t2%n; if(t2==0) {printf("%d",a[n]); t1=1;} else {printf("%d",a[t2]); t1=t2; for(i=t2+1;i<=n;i++) a[i-1]=a[i]; } n--; } }

这是个N个人围成一圈,从第(X)个人开始喊数(Y),被喊到的人出列,然后从后面一个继续开始喊(Y),直到全部出列,要求显示出出列的顺序,我这个是做从第一个人开始喊3,其正确出列顺序应该是

3 6 9 12 2 7 11 4 10 5 1 8 13 可是我做的不对啊,大虾们帮帮我啊

搜索更多相关主题的帖子: int joseph char void 
2004-06-23 12:16
treegrass
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-6-23
收藏
得分:0 

痛苦啊.....快帮帮我啊!

2004-06-23 14:00
treegrass
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-6-23
收藏
得分:0 

怎么没人 理我啊.......无语

FAINT!!!!!

2004-06-23 17:03
treegrass
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-6-23
收藏
得分:0 

楼上滴....呵呵 你没有考虑到人是围成一圈滴啊,如果到时喊的人数超过了13怎么办啊,那时你想的循环就用不鸟了啊..

我自己后来想了下,改了改就对了,如下:

main() {void joseph(int,int*,int,int); int s[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; joseph(13,s,1,3); }

void joseph(int n,int*a,int t1,int k) {int t2,i; while(n) {t2=t1+k-1; t2=t2%n; if(t2==0) {printf("%d",a[n]); t1=1;} else {printf("%d",a[t2]); t1=t2; for(i=t2+1;i<=n;i++) a[i-1]=a[i]; } n--; } }

2004-06-23 17:36
treegrass
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-6-23
收藏
得分:0 

呵呵~~你的思路是对的啊,我在里面就是用 t2=t2%n;来解决这个问题的啊,他是求余,当超过13时求的余就是那个出列的人.

我也是初学者,呵呵~~算法不好说啊,不过你就照着程序写一两个,看看数据你就会知道了.你的第二个问题也可以解决.joseph(13,s,1,3)里的13指有13个人围成一圈,s指你提供的13个人构成的数组,1指从第一个人开始喊,3指喊到3的人出列.开始喊的人和喊的数都可以随便改!!!

2004-06-23 19:31
快速回复:[求助]大虾帮帮忙啊
数据加载中...
 
   



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

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