发新话题
打印

翻硬币问题

翻硬币问题

#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 语句的 意思啊      不懂 哎

TOP

回复

一摞硬币共有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

TOP

发新话题