2020/05/12 A

题意

五个人站成一队,依次买饮料。一个人买完后,离开队列,同时有两个同名的人加入队列。问第n个买饮料的人叫什么?

题解

第一轮的五个人全部买完后,会有第一轮两倍的人(10人)加入作为第二轮;第二轮的人买完后,会有第二轮两倍的人加入(20人)作为第三轮……形成5,10,20,40省略号的等比数组。每一轮中人物名称顺序相同,但是同名的人的个数是上一轮的两倍。所以只需知道第n个买饮料的人在他所在那一轮的什么部分,就可以知道他的名字。

代码

#include
#include
using namespace std;
int main()
{
int n;
int x=1;
int m;
int a;
cin>>n;
while(1){ //求得第n个人在的那一轮
int p=5*(pow(2,x)-1);
if(p>=n)
break;
else
x++;
}
m=5 * pow(2,x-1); //第n个人在的那一轮的总人数
a=n-5 * (pow(2,x-1)-1); //第n个人在的那一轮的位置
if(a * 1.0/m<=0.2)
{
cout<<“Sheldon”;
}
else if(a * 1.0/m<=0.4){
cout<<“Leonard”;
}
else if(a * 1.0/m<=0.6){
cout<<“Penny”;
}
else if(a * 1.0/m<=0.8){
cout<<“Rajesh”;
}
else{
cout<<“Howard”;
}
return 0;
}

你可能感兴趣的:(2020/05/12 A)