| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1828 人关注过本帖
标题:[求助]怎么用C语言表达约瑟夫环?
只看楼主 加入收藏
yutoo
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-7
收藏
 问题点数:0 回复次数:12 
[求助]怎么用C语言表达约瑟夫环?

大家好,我是刚学C语言,有个题目是关于约瑟夫环的:
比如10个人报数,1,2,3,1,2,3,。。。报数,报到3的出局,如此循环,最后留下谁?
我自己想了很久,程序始终写不出完整的出来,请大家帮忙想想 谢谢了!!!

下面是我自己想的程序,我可以把报3的输出来,没办法把留下的输出来,我的程序如下:
#include<stdio.h>
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,,j=2; /*i是变量;j是代表下标;*/
for(i=0;i<10;i++)/*这里我想应该是用while循环,可我写不出来*/
{

for(j=2;j<9;j+=3)
{
printf("%d\t",a[j]);/*这是报3的数*/

}

}

}
请大家多指教!!!!!!!!谢谢!!!

搜索更多相关主题的帖子: 约瑟夫 C语言 表达 
2006-02-07 19:17
yutoo
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-7
收藏
得分:0 
我晕 难道没有人可以用数组表达出来吗?
2006-02-08 21:06
weizheng
Rank: 1
等 级:新手上路
威 望:2
帖 子:286
专家分:0
注 册:2005-4-21
收藏
得分:0 

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//定义Joseph的节点结构体
typedef struct josephnode
{
int joseph_num;
int joseph_password;
}joseph_node;

//输入各个结点信息的函数
void joseph_input(joseph_node arry[],int n,int *begin_num);
//处理函数
void joseph_process(joseph_node arry[],int n,int *begin_num);

void main()
{
int total_pers;
int begin_num=0;
joseph_node * ip_jose;
puts("please enter the total persons:");
scanf("%d",&total_pers);
ip_jose=(joseph_node *)malloc((total_pers*sizeof(joseph_node)));
if(!ip_jose)
exit(1);
joseph_input(ip_jose,total_pers,&begin_num);
joseph_process(ip_jose,total_pers,&begin_num);
}


void joseph_input(joseph_node arry[],int n,int *begin_num)
{
int i;
int password;
printf("please enter the begin password:\n");
scanf("%d",begin_num);
for(i=0;i<n;i++)
{
printf("please enter th%d person's information:\n",i+1);
printf("please enter the person's password:\n");
scanf("%d",&password);
fflush(stdin);
arry[i].joseph_num=i+1;
arry[i].joseph_password=password;
}
}


void joseph_process(joseph_node arry[],int n,int *begin_num)
{
int ip;
int counter=0;
int total_num;
int j;
int count;
int ip_node;
int password;
total_num=n;
ip=0;
password=*begin_num;
//就一个结点的情形
if(total_num==1)
{
printf("th%d person out of the line is :\t",++counter);
printf("%d\n",arry[0].joseph_num);
exit(1);
}

//多个接点的情形
do{
count=0;
do{
count++;
ip_node=ip%total_num;
ip++;
}while(count<password);
//输出出列的那个
printf("th%d person out of the line is :\t",++counter);
printf("%d\n",arry[ip_node].joseph_num);
//删除那个接点重新组合数组
password=arry[ip_node].joseph_password;
ip=(ip-1)%total_num;
total_num=total_num-1;
for(j=ip;j<total_num;j++)
{
//arry[j].joseph_num=arry[j+1].joseph_num;
//arry[j].joseph_password=arry[j+1].joseph_password;
arry[j]=arry[j+1];
}
}while(total_num>1);
//最后一个接点输出
printf("th%d person out of the line is :\t",++counter);
printf("%d\n",arry[0].joseph_num);
}


温和如玉,完美纯正。
2006-02-09 23:40
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

#include <stdio.h>
#include <conio.h>
#define M 10 /*人数,也可以修改*/
void main()
{
int a[M];
int i,k=0,count=0; /*k为已出局人数,其余控制变量*/

for(i=0;i<M;i++) /*赋值*/
a[i]=i+1;
i=0;
while(k<M-1) /*k最大8人,执行为这个回合就是出局9人,留下一人*/
{
if(a[i]!=0)
count++;
if(count==3) /* 数3的出局,把出局元素值设为0*/
{
a[i]=0;
k++;
count=0;
}
i++;
if(i==M) /*如果数到数组末,返回数组头*/
i=0;
}
i=0;
while(a[i]==0) /*跳过出局元素*/
i++;

printf("The %dth is left.\n",i+1); /*输出*/
getch();
}


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-02-10 01:23
BugEyes
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-1-10
收藏
得分:0 

学前班校长,个人blog:http://bugeyes.blog.
2006-02-10 23:11
cyuyan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-10
收藏
得分:0 

楼住刚学C语言?这题好象要用循环链表,
是《数据结构》中的内容

2006-02-11 11:48
BugEyes
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-1-10
收藏
得分:0 
不用那么麻烦

学前班校长,个人blog:http://bugeyes.blog.
2006-02-11 17:23
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
#include<stdio.h>
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},b[10],i;
for (i=0;i<=9;i++)
{
if ((i+1)%3!=0)
{b[i]=a[i];
printf ("%d\n\n",b[i]);}
}
}

唉,感慨! 我想了差不多1小时多,羞盔....

[此贴子已经被作者于2006-2-11 22:10:09编辑过]


最好的域名、虚拟主机、VPS  www.
2006-02-11 21:17
zushuboderen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2005-12-24
收藏
得分:0 
晕,三楼的完全看不懂啊

冷静点............. 耐心点.............
2006-02-13 09:00
zushuboderen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2005-12-24
收藏
得分:0 
8楼的好象不用这个数组b[]接受数字吧,直接用一个int变量就行啊

冷静点............. 耐心点.............
2006-02-13 09:12
快速回复:[求助]怎么用C语言表达约瑟夫环?
数据加载中...
 
   



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

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