不是VIP会员,不能显示答案

题目解答

题目:
(翻硬币)

一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们整体一起翻面后放回原处(如101111前5个翻面结果是000101),再取3枚,取4枚……直至m枚。然后再从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中每一枚又是正面朝上为止。例如,m为1时,翻两次即可;m 为4时﹐翻11次;m为9时,翻80 次。

【输入】

仅有的一个数字是这摞硬币的枚数m(0 <m < 1000),

【输出】

为了使这握硬币中的每一枚都是正面朝上所必须翻的次数。

【输入样例】

30

【输出样例】

899





#include <iostream>

using namespace std;

int solve(int m);

int main() {

freopen("demo.out","w", stdout);

int m;

do {

scanf("%d",&m);

if(m>0 && m<1000)

printf("%d\n",___(1)___);

} while (m>0 && m< 1000);

return 0;

}



int solve(int m) {

int i,t,s;//翻转的次数

int flag;

if(m==1)

s=___(2)___;

else {

d=2*m+1;

//确定硬币是经过偶数次翻转还是奇数次翻转

t= 2;

//表示一个COIN必须翻转偶数次,才能从正面继续翻到正面

i=1;//翻转的轮数,每轮为从1翻转到m

flag=0;//退出循环标志,翻转完成标志

do {

if(t==1) {

s=___(3)___;

flag = 1;

} else if(___(4)___) {

s=i*m-1;

flag=1;

} else {

t=___(5)___;

}

i=i+1;

} while(!flag);

}

return s;

}




选择题

1) ①处应填( )

2) ②处应填( )

3) ③处应填( )

4) ④处应填( )

5) ⑤处应填( )
考点:
分析:
解答:
评论:
老师: