| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1828 人关注过本帖
标题:[求助]怎么用C语言表达约瑟夫环?
只看楼主 加入收藏
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
小弟以前有看过,

#include <stdio.h>
#include <conio.h>
#define MAX 200 /*数组长度上限*/
main()
{
int x[MAX],i,j,n,k; /*n为报数的总人数,k为报几号出去的那个数。按题意n=10,k=3*/
int start,temp,save_n; /*start为这一次开始报数的那个人的序号,save_n为总人数n的一个备份*/
clrscr();
/*输入n和k*/
printf("n=");
scanf("%d",&n);
if (n>=MAX)
{
printf("n(%d)\>MAX(%d)\n",n,MAX);
printf("Press any key to exit");
getch();
return;
}
printf("k=");
scanf("%d",&k);

for (i=0;i<n;i++)
x[i]=i+1;
save_n=n; /*备份总人数*/
for (start=1;n>1;) /*主要思想是,当报到k的那个人的序号复制到temp变量。同时,这个序号以后和n以前的数据前移1位置,再将这个temp序号放在数组的n-1。同时n减1。*/
{
start=start+k-1;
start%=n;
if (start==0)
{
start=1;
n--;
continue;
}
temp=x[start-1];
for (j=start;j<=n-1;j++)
x[j-1]=x[j];
x[n-1]=temp;
n--;
}
/*数组的后面开始输出出队的序号*/
for (i=save_n-1;i>=0;i--)
{
printf("%d",x[i]);
if (i!=0)
putch(',');
}
getch();
return 0;
}

2006-02-13 09:22
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 

可能表达得不太好,望见谅!!!


2006-02-13 09:23
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
以下是引用zushuboderen在2006-2-13 9:12:00的发言:
8楼的好象不用这个数组b[]接受数字吧,直接用一个int变量就行啊


有理,


最好的域名、虚拟主机、VPS  www.
2006-02-13 12:46
快速回复:[求助]怎么用C语言表达约瑟夫环?
数据加载中...
 
   



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

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