标题:
翻硬币问题
[打印本页]
作者:
饭特稀
时间:
2009-9-16 13:14
标题:
翻硬币问题
#include "stdafx.h"
#include <iostream>
using namespace std;
void solve(int m)
{
bool * CurrentSurface = new bool[m];
for (int i=0;i< m; i++)
CurrentSurface
=true;
int turnTimes=0;//翻转次数
bool bSuccess=false;
do
{
for(int i=0;i<m;i++)
{
for(int j=0;j<(i+1)/2;j++)
{
//turnCoin(j,i-j+1);
bool temp=CurrentSurface[j];
CurrentSurface[j]=!CurrentSurface[i-j];
CurrentSurface[i-j]=!temp;
}
if((i+1)%2==1)
CurrentSurface[i/2]=!CurrentSurface[i/2];
turnTimes=turnTimes+1;
bSuccess=true;
for(int n=0;n<m;n++)
{
if(CurrentSurface[n]==false)
{
bSuccess=false;
break;
}
}
if(bSuccess)
break;
}
}
while(!bSuccess);
printf("翻转的总次数是:%d\n",turnTimes);
delete[]CurrentSurface;
}
int main()
{
int CoinCount=1;
while(CoinCount>0)
{
printf("请输入硬币 的总数:");
scanf("%d",&CoinCount);
solve(CoinCount);
}
return 0;
}
谁能给讲解 讲解 i,j ,m ,n 还有那几个for循环和if 语句的 意思啊 不懂 哎
作者:
饭特稀
时间:
2009-9-16 13:19
标题:
回复
一摞硬币共有M枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后再放回原处。再取3枚,取4枚厖直至M枚。然后再从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中的每一枚又都是正面朝上为止。
Input
第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每行仅有的一个数字是这摞硬币的枚数M,0< M< 10^8。
Output
对输入的每组测试数据,输出为了使这摞硬币中的每一枚又都是正面朝上所必需翻的次数。在你的程序中可能需要使用64位的整数来保存这个次数。
Sample Input
4
4
1
30
9
Sample Output
11
2
899
80
欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/)
Powered by Discuz! 6.0.0