| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1110 人关注过本帖
标题:[原创]约瑟夫环(数组实现!!)
只看楼主 加入收藏
musicml
Rank: 1
等 级:新手上路
帖 子:273
专家分:0
注 册:2005-4-2
收藏
 问题点数:0 回复次数:2 
[原创]约瑟夫环(数组实现!!)

有兴趣的看看奥!! //Joseph(数组实现) //问题描述: //编号为1,2,...,n的n个人按顺时针方向围坐在一圈, //每个人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人 //开始按顺时针方向开始报数,报到m时停止报数.报m的人出列,将他的密码作为新的 //m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有的人 //全部出列为止.

//作者:musicml

//程序如下:

#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); }

搜索更多相关主题的帖子: 约瑟夫 
2005-05-01 21:59
weizheng
Rank: 1
等 级:新手上路
威 望:2
帖 子:286
专家分:0
注 册:2005-4-21
收藏
得分:0 
  不错,支持楼主! 好程序。

温和如玉,完美纯正。
2005-05-01 23:57
YHMBCCN
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-8-29
收藏
得分:0 
干的漂亮楼主
2014-10-29 19:04
快速回复:[原创]约瑟夫环(数组实现!!)
数据加载中...
 
   



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

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