| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1472 人关注过本帖
标题:josephus数小孩问题
只看楼主 加入收藏
catcai
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2004-7-28
收藏
 问题点数:0 回复次数:1 
josephus数小孩问题

有m个小孩围成一圈,每数n个小孩,该小孩离开,问最后剩下第几个小孩? 在运行时确定小孩数(用new和delete操作府),并输入检查:小孩数不能小于1,数小孩的间隔数不能小于1,大于小孩数.发现错误让其选择:停止运行,重输,一默认值10和3运行. 我的程序通过了编译但运行不对,帮我看一下哪里错了 #include <iostream.h> main() { int num; //小孩总数 int interval; //数小孩的间隔数 cout <<"please input the interval and num:" <<endl; cin >>interval >>num; int * a=new int[num]; //分配堆空间 for (int r=0;r<num;r++) *(a+r)=r+1; //小孩编号 while(num<1 || interval<1 || interval>num) //输入错误时 { int p; do { cout <<"error--please select:" <<"1or2or3"<<endl <<"1:exit" <<endl <<"2:input again" <<endl <<"3:num=10 and interval=3" <<endl; cin >>p; }while(p!=1 || p!=2 || p!=3); //三种选择 switch(p) { case 1:return false; //停止运行不知怎么表示,这里用的不知对否? case 2:; //空语句,让它自己循环 case 3:const num=10,interval=3;break; } } for(int q=0;q<num;q++) cout <<*(a+q) <<","; //输出开始时的小孩编号 cout <<endl; int k=1; //标识处理第k个小孩离开 int i=-1; //数组下标(下一个值0就是第一个小孩的下标) while(1) { for(int j=0;j<interval;) { i=(i+1)%num; //对下标加1求模 if(a[i]!=0) //判断小孩是否已离开,0为离开 j++; } if(k==num)break; //判断是否只剩一个小孩了

cout <<a[i] <<","; //输出离开的小孩编号 a[i]=0; //标识该小孩已离开 k++; //处理下一圈小孩 delete[]a; } cout <<"\nNo." <<*(a+i) <<"boy's won.\n"; //输出胜利者 }

搜索更多相关主题的帖子: 数小孩 josephus interval num 间隔 
2004-08-11 18:45
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:0 

上面的程序我没试过,不过我自己重新写了一个程序。如果楼主的题题意我没弄错的话,应该是正确的。

#include <iostream> #include <conio.h> using namespace std;

int main() { int num, interval; cout<<endl; do{ cout<<"please input the interval and num:"; cin>>interval>>num;

int p; if(num<1 || interval<1 || interval>num) do{ cout<<"error--please select:"<<"1or2or3"<<endl <<"1.exit"<<endl <<"2.input again"<<endl <<"3.num=10 and interval=3"<<endl <<"select:"; cin>>p; }while(p!=1 && p!=2 && p!=3);

switch(p){ case 1:return 0; case 2:break; case 3:num=10;interval=3; break; } }while(num<1 || interval<1 || interval>num);

int *child=new int[num]; for(int i=0; i<num; i++) *(child+i)=1;

int count=0; int k=num; int p=-1;

while(k!=1){ count++;

do{ p++; if(p==num) p=0; }while(!child[p]);

if(count==interval){ child[p]=0; cout<<p+1<<' '; count=0; k--; } }

cout<<endl <<"Win:"; for(i=0; i<num; i++) if(child[i]){ cout<<i+1; break; }

cout<<endl <<"Press anykey..."; getch(); delete []child; return 1; }

2004-08-12 13:42
快速回复:josephus数小孩问题
数据加载中...
 
   



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

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