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



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

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