本文主要是介绍2015年第十六周oj刷题:顺序排号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
<center><h2>1067: 顺序排号</h2><span class="green">Time Limit: </span>1 Sec <span class="green">Memory Limit: </span>128 MB
<span class="green">Submit: </span>213 <span class="green">Solved: </span>157
[<a target=_blank href="http://202.194.119.110/submitpage.php?id=1067">Submit</a>][<a target=_blank href="http://202.194.119.110/problemstatus.php?id=1067">Status</a>][<a target=_blank href="http://202.194.119.110/bbs.php?pid=1067">Web Board</a>]</center><h2>Description</h2><div class="content"><p>有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。</p></div><h2>Input</h2><div class="content"><p>初始人数n</p></div><h2>Output</h2><div class="content"><p>最后一人的初始编号</p></div><h2>Sample Input</h2><pre class="content"><span class="sampledata">3</span>
Sample Output
2
#include<iostream> using namespace std; int main()
{ int num[50]; int i,j,k,m,n; int *p; cout<<endl<<"请输入总人数:"<<endl; cin>>n; p=num; for(i=0;i<n;i++) { *(p+i)=i+1; //以1至n为序,给每个人编号 } i=0; //i为每次循环时计数变量 k=0; //k为按1 2 3报数时的计数变量 m=0; //m为退出人数 while(m<n-1) //当退出人数比n-1少时(即未退出人数大于1时)执行循环体 { if(*(p+i)!=0) { k++; } if(k==3) //将退出人的编号置为0 { *(p+i)=0; k=0; m++; } i++; if(i==n) { i=0;//报数到尾后i恢复为0 } } while(*p==0) { p++; } cout<<"最后一个是"<<*p<<" 号!"<<endl; return 0;
} /*
* Copyright (c) 2012, 烟台大学计算机学院
* All rights reserved.
* 作 者: 刘同宾
* 完成日期:2012 年 12 月 05 日
* 版 本 号:v1.0
*
* 输入描述:
* 问题描述:有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),
* 凡报到3的人退出圈子,问最后留下的人原来排在第几号。
* 程序输出:
* 问题分析:略
* 算法设计:略
*/#include<iostream>using namespace std;int main()
{int num[50];int i,j,k,m,n;int *p;cout<<endl<<"请输入总人数:"<<endl;cin>>n;p=num;for(i=0;i<n;i++){*(p+i)=i+1; //以1至n为序,给每个人编号}i=0; //i为每次循环时计数变量k=0; //k为按1 2 3报数时的计数变量m=0; //m为退出人数while(m<n-1) //当退出人数比n-1少时(即未退出人数大于1时)执行循环体{if(*(p+i)!=0){k++;}if(k==3) //将退出人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n){i=0;//报数到尾后i恢复为0}}while(*p==0){p++;}cout<<"最后一个是"<<*p<<" 号!"<<endl;return 0;
}
这篇关于2015年第十六周oj刷题:顺序排号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!