| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 722 人关注过本帖
标题:这个和序!怪怪!!还望哪位高手赐教
只看楼主 加入收藏
cxb
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2004-11-9
收藏
 问题点数:0 回复次数:5 
这个和序!怪怪!!还望哪位高手赐教

有个和序题是这样的:50个学生按1到50序号顺时针围成一个圈,做出局游戏,老师站在最外逆时针从最后一个人数起,每数到5时这人从圈里出来,继续数1,2,3,4,5,数到第5个学生时他就出局,已出局的位置不再参加计数,直至所有的学生出局为止,问最后一个出局的学生序列号是多少? 结果32。 我编了一个程

#include<stdio.h> main() { int i,j,n=0,a[52]; for(i=1;i<=50;i++) a[50-i]=i; a[50]=51; a[51]=52; /*用于检测是否只剩一个人了*/ for(i=0;a[2]!=52;i++) { if(a[i]==51) /*检测是否到了最后一位并跳回*/ i=0; n++; if(n==5) { printf("%d ",a[i]); /*用来查看是否出错,无实义*/ for(j=i;j<51;j++) a[j]=a[j+1]; n=0; } } printf("\n%d\n",a[0]); }

我编的是数到6个就出列没有问题(如程序),可是我把那个改成到第5个出列,就错了。 就是把14行n==5改成n==4;就错得一蹋糊涂。请哪位指教一二。邮箱cxb23@126.com

2004-11-11 13:31
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
你指的出错是什么意思????

差点把你忘了...
2004-11-11 13:36
cxb
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2004-11-9
收藏
得分:0 

我所说的出错是运行时按道理只会打印出49+1个数,可是实际上当我将n==5改为n==4,时去打印出来了好几页数据,难道是我的TC有问题?我用的是Turboc2.0的,你们有空就去帮我调试一下吧,要是能把更正后的结果给我贴上来或是发到我邮箱里,那就最好了。谢谢阅读和回贴的人。


2004-11-11 17:38
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

这是经典的约瑟夫问题,

我知道的几种方法:循环链表,

标记数组——好象就是楼主的方法,但我一般写标记数组法是把没出局的用1,出局用0这么标记,

建议楼主这么试试,还有跳位可以在没次循环开始时把(i%总数);

数学方法:这个方法比较难想到,对最大报数比较小(目前只研究过对2的情况)的问题适用,

可以大量节约空间和时间,大家不妨看看这个约瑟夫的题,

如果不用数学方法可能就不行了

http://acm.tongji.edu.cn/people/ps/showproblem.php?problem_id=1112

[此贴子已经被作者于2004-11-12 19:06:38编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-11-11 17:57
心若在
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2004-9-21
收藏
得分:0 

用的是循环链表 最直接的一种 仅供参考

# include <stdlib.h>

# define LEN sizeof(struct student) # define STUD 50

struct student { int num ; struct student*next ; } ;

main() { struct student *head = NULL, *p1 = NULL, *p2 = NULL, *p3 = NULL, *p4 = NULL ; int i, j = 0, n = STUD ; for(i=STUD;i>0;i--) { p1=(struct student*)malloc(LEN); p1->num = i ; if(i == STUD) head=p1 ; else p2->next = p1 ; p2 = p1 ; } p2->next = head ; p3 = head ; while(n != 1) { j++; if(j == 5) { p4->next = p3->next ; j = 0 ; n--; } else { p4 = p3 ; } p3 = p3->next ; } printf("%d", p3->num); getch(); }

希望对你在帮助~~~~


我知道我菜 但我会尽我最大的努力去帮助别人!
2004-11-11 21:18
cxb
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2004-11-9
收藏
得分:0 

4楼的那位所讲的方法我在编完这个和序后也在别的地方看到了,只是觉得自己这个程序错了,不知错在哪里,感觉非常不爽,就来此发贴子。对于5楼的那位朋友编的那个程由于用到结构共同体,我们课本上有但未做要求,暂时还是不太明白,不过放在上些面还是有用的,等我自己看了书以后可以参考一下方法,同时也可以给别感兴趣的同学读一读。对我本人也是一种支持嘛。希望有哪一位还能阅读一下我编的程序,按我的思路(总是会有一点可取的地方的)去考虑一下,最好是能把更正过来的结果给贴上来。谢了!


2004-11-13 16:31
快速回复:这个和序!怪怪!!还望哪位高手赐教
数据加载中...
 
   



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

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