标题:请大家来读题!~~
只看楼主
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 

请问能把计算过程写边么?难道和我写的不一样么?


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-05-15 19:42
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
以下是引用走刀口→超在2006-5-15 19:02:00的发言:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 4 5 7
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1

您对题目的理解是错的。。。


对不礼貌的女生收钱......
2006-05-15 19:46
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
晕死,这格式不好调,凑合着看吧,
就是17个人围成一圈,3的倍数走开就是。
还是看不懂,留给版主吧,呵呵。。。

对不礼貌的女生收钱......
2006-05-15 19:47
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
饿。。。见笑了。那说说看正确的喃!

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-05-15 19:48
mico
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2005-7-25
得分:0 

#include<stdio.h>

void main(void)
{
int i,test,p[17],head;
for(i = 0; i < 16; i++)
p[i] = i + 1;
p[16] = 0;
test = 0;
while(test != p[test])
{
for(i = 1; i < 3; i++)
{
head = test;
test = p[test];
}
p[head] = p[test];
test = p[head];
}
printf("\n%5d",test);
return;
}


可以在外部循环中p[head] = p[test];
下加一个printf("%d",p[test])的变换 但p[test]等于1 后就变成6了 应该是 4 啊~~实在看不懂了~~


2006-05-15 21:23
mico
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2005-7-25
得分:0 

大家踊跃发言啊!~


2006-05-16 19:01
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

#include<stdio.h>
void main(void)
{
int i,test,p[17],head;
for(i = 0; i < 16; i++)
p[i] = i + 1;
p[16] = 0; //构成静态环形链表
test = 0;
while(test != p[test]) //当环中元素大于1
{
for(i = 1; i < 3; i++) //1到3报数
{
head = test; //此处head是
test = p[test]; //比test“慢一拍”的链表哨兵
}
p[head] = p[test]; //删除1个元素
test = p[head]; //继续“数”下去
}
printf("\n%5d",test);//Josephus问题的胜利者
return;
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-16 19:22
mico
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2005-7-25
得分:0 
谢谢了,但是和自己笔算还是有些出处,算了不能为了一个山坡放弃前面的大好河山。再次感谢!

2006-05-16 20:56
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
得分:0 
以下是引用mico在2006-5-14 23:03:00的发言:

#include<stdio.h>

void main(void)
{
int i,test,p[17],head;
for(i = 0; i < 16; i++)
p[i] = i + 1;
p[16] = 0;
test = 0;
while(test != p[test])
{
for(i = 1; i < 3; i++)
{
/*head = test;*/ 该句可删 定义了head但实际上没真正用到haed
test = p[test];
}
/*p[head] = p[test];
test = p[head];*/ 这2句可合并为test= p[test];

}
printf("\n%5d",test);
return;
}


昨天晚上仔细看了下,如果单从程序的角度来说该程序还可以简化,具体看上面红的
所以整个循环就while就变成了让test+3(但当test>=14时另论)
具体为text的值为0,3,6,9,12,15
1,4,7,10,13,16
2,5,8,11,14
0 ,3,6,9,12,15
。。。。。。
我认为test 不可能等于p[test]2者始终差1(除了p[16])
所以我认为程序应该是有问题的


很高兴能和大家一起学习程序! QQ:114109098
2006-05-17 10:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-64211-1-1.html




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

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