C++程序设计 (第三版) 谭浩强 习题6.5
习题 6.5 有n个人围成一圈,顺序排号。从第1个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
#include <iostream>
using namespace std;
void inputPeople(int *num){
cout<<"Enter the total number of people: ";
cin>>*num;
while(*num <= 1){
cout<<"Number Error! Retry!\nEnter the total number of people: ";
cin>>*num;
}
}
void initialPeople(int **people, int *num){
*people = new int[*num];
for(int i = 0; i < *num; i++){
(*people)[i] = i + 1;
}
}
void lastOne(int *people, int *num){
int count = 0;
int number = *num;
for(int i = 0; i <= *num; i++){
if(i == *num){
i = 0;
}
if(people[i] == 0){
continue;
}
count++;
if(count == 3){
people[i] = 0;
number--;
count = 0;
}
if(number == 1){
break;
}
}
for(int i = 0; i < *num; i++){
if(people[i] != 0){
cout<<"The lase one is No."<<i + 1<<endl;;
break;
}
}
}
int main(){
int *num = new int;
int *people = NULL;
inputPeople(num);
initialPeople(&people, num);
lastOne(people, num);
delete(people);
delete(num);
system("pause");
return 0;
}