把硬币摆成一个圈就好搞 逻辑就清楚了 下面代码可以求出到底要多少次 代码没优化 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;iint 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;
}