N个硬币,正面朝上排列,每次将5个硬币翻过来放在原位置直到最后全部硬币翻成反面朝上为止求c++程序讲解

2025-04-13 08:44:40
推荐回答(1个)
回答(1):

把硬币摆成一个圈就好搞 逻辑就清楚了 下面代码可以求出到底要多少次  代码没优化 N<5不一定会精确..

#include
using namespace std;

const int maxNum=10000;//设置个最大值 
const int reverseNum=5;//一次翻转几个 

int main()
{
int n;//就是N 不要超过10000 
bool m[maxNum]={0};//模拟硬币的布尔数组 值为true就是正面 
cin>>n;//输入N的值 
for(int i=0;i int num=0,index=0,x=0;
//num是用来记录前N个硬币为反面的硬币数 也就是false的值 开始设置为0  因为前N个硬币都是正
//index是翻转的头下标 从第几个硬币开始翻由index决定
//x记录翻转次数 翻一次x+1 
while(n!=num)//当记录为反的硬币不为N的时候就继续翻 
{
int i=reverseNum;
while(i--)//用i记录翻转次数 翻5次 
{
m[index]=!m[index];//翻 
if(m[index])//翻完了是正面 
--num;//就要扣掉
else
++num;//不是正就加上
index=index==n-1?0:index+1;//越界了就mod一下 
}
++x;//每个大循环计数一次 
}
cout< return 0;
}