| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1111 人关注过本帖
标题:一个简单的问题 望指教
只看楼主 加入收藏
leng
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-6-27
收藏
 问题点数:0 回复次数:18 
一个简单的问题 望指教
若干个人围坐在一起,从某个人开始报数,报到某个数字就将报该数的人杀死,最后剩下的那个人获胜。编一个程序:有12个人围坐在一起从序号为2的人开始报数,杀掉报4的人,被杀的顺序是6,10,2,7,12,5,1,9,8,11,4。最后3获胜。
搜索更多相关主题的帖子: 指教 
2007-08-11 10:02
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
搜索 约瑟夫环

简单的用循环数组模拟,也可以直接用数学式子解决(前不久有看到,这里)。

Fight  to win  or  die...
2007-08-11 10:57
leng
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-6-27
收藏
得分:0 
用循环数组模式的话,怎样解决比如10被杀掉后,再循环跳到2呀???

2007-08-11 11:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

i < 12-1 ? ++i : i = 0

这样就可以保证循环。

[此贴子已经被作者于2007-8-11 12:51:35编辑过]


Fight  to win  or  die...
2007-08-11 12:26
leng
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-6-27
收藏
得分:0 
谢谢  仔细研究中。。。。。。

2007-08-11 13:21
狂人老大
Rank: 1
来 自:杭州
等 级:新手上路
威 望:1
帖 子:394
专家分:0
注 册:2007-6-21
收藏
得分:0 
你看看吧
有什么可以改进一下
#include<stdio.h>
void main()
{
int k=0,i,a[12],m=0;
for(i=0;i<12;i++)
a[i]=1;
for(i=2;;i++)
{
if(i==12)i=0;
if(a[i]==0)
continue;
else
k++;
if(k==4)
{
a[i]=0;
printf("%d\n",i+1);
k=0;
m++;
}
if(m==12)break;
}
}

ACMer的QQ群:33741351
单片机QQ群:55130117
2007-08-12 11:00
leng
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-6-27
收藏
得分:0 

2007-08-12 11:13
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(leng)一个简单的问题 望指教

/*---------------------------------------------------------------------------
File name: Josephus_nth_victim.cpp
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 8/11/2007 20:23:48
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762


Modification history:
===========================================================================

Sample output

12 4 2
5 9 1 6 11 4 12 8 7 10 3 2

41 3 1
3 6 9 12 15 18 21 24 27 30 33 36 39 1 5 10 14 19 23 28 32 37 41 7 13 20 26 34 40
8 17 29 38 11 25 2 22 4 35 16 31

*/

#include <iostream>

using namespace std;

/** nth_victim of the Josephus circle.
* @param n --- number of people
* @param m --- step number
* @param s --- start
* @param k --- kth victim
* @return returns the original index of the kth victim.
*/
int nth_victim(int n, int m, int s, int k)
{
int p=k*m;
while(p>n)
p=(m*(p-n)-1)/(m-1);

p=(p+s-1)%n;
if(p==0)
p=n;

return p;
}


int main()
{
int n, m, s, k;
while(cin>>n>>m>>s)
{
for(k=1; k<=n; ++k)
cout<<nth_victim(n, m, s, k)<< " ";
cout<<endl<<endl;
}

return 0;
}


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-08-12 11:27
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
[CODE]#include <iostream>
using namespace std;

#define n 12
int main(){
int a[] = {1,2,3,4,5,6,7,8,9,10,11,12};
int i = 2,j = 0,killed = 0;
while (killed != n){
if (a[i])
++j;
if (j == 4){
cout << a[i] << " ";
++killed;
j = 0;
a[i] = 0;
}
i < n-1 ? ++i : i=0;
}
cout << "\n";
system("pause");
}[/CODE]

Fight  to win  or  die...
2007-08-12 11:48
狂人老大
Rank: 1
来 自:杭州
等 级:新手上路
威 望:1
帖 子:394
专家分:0
注 册:2007-6-21
收藏
得分:0 
哥们儿   我运行你的程序  怎么会没有结果出来啊

ACMer的QQ群:33741351
单片机QQ群:55130117
2007-08-12 11:49
快速回复:一个简单的问题 望指教
数据加载中...
 
   



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

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