房天下 > 房天下问答 > 业主生活 > 其他
  • c++程序设计 半数跳海

    半数跳海基本描述 在类似我们人类生存的另一个星球上,由于气候的关系,每过一年,人们就要从东方向西方迁徙,然后再过一年,就要从西方回到东方,年夏一年。迁徙就必须渡海,渡海就必须过一个鬼门关。鬼门关不管船的贵贱,一律放行船中人数的一半,另一半则必须跳海以结束自己的生命。跳海的人数一定不能少与船上人数的一半。 每条船上有一个法师,他负责监管一种筛选规则,让人们围成一圈,每数到一个“天数”,则数到的这个人就得跳海,然后继续绕着圈子树一个“天数”,让下一个人跳海,直到鬼门关所要的半数。因此,每逢迁徙,总有大批的人要贿赂法师,希望自己辛免过关,而没有钱的人则要听天有命。法师确实掌握着每个人的命运,但他有自己办事的原则,他暗中替天行道,每到鬼门关的时候,就乘机将那些罪大恶极的,不配继续做人者给过滤掉。他所受的贿赂,用来平衡那些辛存下来的人生活。 法师是怎样替天行道的呢?原来,他是将一些坏人安排在某些位子上,使得他们的“天数”一到,不得不跳。那么那些位子究竟是怎么分布的呢?请你用地球人当今的编程技术来揭示这一秘密吧。输入描述 有多少条船(<=5000),就有多少个整数对,整数中的第一个数是一条船上的人数(<=50),第2个数是“天数”(1<=“天数”<=人数)。输出描述 对于每组整数,按跳海的顺序输出半数不辛的位子,中间以空格隔开。每条船列出跳海的全部位置后,应另一行。样本输入10 3 20 7 5 2样本输出3 6 9 2 77 14 1 9 17 5 4 16 82 4 1

    提问者:点点心灯

    发布于2011-01-17

共1个回答
  • 海河-渤海 丨Lv 0
    你设计的输入和输出有点问题,没有设定输入结束的标志,所以我帮你改了下。代码如下:#include<iostream> #include<set>using namespace std; void main(){ int nums,i,days,now,nn; char yes; set<int> people; set<int>::iterator posnow; while(1) { cout<<"请输入人数:"; cin>>nums; cout<<"请输入天数:"; cin>>days; people.clear(); for(i=1;i<=nums;i++) people.insert (i); posnow=people.begin (); while(people.size ()>nums/2) { for(i=1;i<days;i++) { posnow++; if(posnow==people.end()) posnow=people.begin(); } now=*posnow; posnow++; people.erase (now); cout<<now<<" "; } cout<<endl; cout<<"是否退出?(Y/N)"; cin>>yes; if(yes=='y' || yes=='Y') break; }}
    +10 2011-01-18 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。