解题思路:看到大神写的不禁感叹! 我也是借鉴来的
首先我们要把题目搞清楚,将各个对象用C++的语言描述
n个人,首先应该想到数组,因为数组有小标好计数,还要是动态数组,因为数组的定义中[]内必须是常量而不是变量;
1~3我们可以设置一个计数器,初始值为0,到第一个人手上才为1,第二个人手上为2,。。。以此类推
对象想好了,我们来下语句
想想要留下最后一个人,即执行n-1次,我们选用count()计数函数,头文件为#include<algorithm> 语法为count(a,b,ax)意思是计算a~b区间
x出现的个数,循环条件为count(number.begin(),number.end(),0)!=number.size()-1
计数器的设置,每个人都要记一次数,当记到3时,此人出局(即对应的数组元素为0,计数器重新计数;以此循环n-1次
注意事项:
参考代码:
#include<iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> number; //动态数组
for(int i=0;i<n;i++) //为数组添加1~n
number.push_back(i+1);
int inder=0; //设置计数器
//循环至只留下一个数
while(count(number.begin(),number.end(),0)!=number.size()-1){
for(int i=0;i<n;i++){
if(number[i]!=0) inder++; //计数器开始计数
if(inder==3){ //当某个数(人)说到三时
number[i]=0; //出局,即设为0
inder=0; //计数器重新计数
}
}
}
for(int i=0;i<n;i++){ //最后输出没没出局的
if(number[i]!=0)
cout<<number[i]<<endl;
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复