还是C++&&&求救呢

来源:百度知道 编辑:UC知道 时间:2024/05/22 22:34:59
一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处;接着取下最上面的2枚硬币,将它们一起翻面后再放回原处(翻转后第二枚在上,第一枚在下);再取3枚;取4枚;直至m枚。然后再从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中的每一枚又都是正面朝上为止。例如:m为1时,翻两次即可;m为2时,翻3次即可;m为3时,翻9次即可;m为4时,翻11次即可;m为5时,翻24次即可;m为30时,翻899次即可。
[输入格式]
仅有的一个数字m(0<m<100),表示这摞硬币的枚数。
[输出格式]
仅输出一个数,表示为使这摞硬币中的每一枚又都是正面朝上所必需翻的次数。

请高手能帮我用C++的语言写一下完整的程序 …… 谢谢……谢谢(*^__^*) 感激阿……
为什么没有回答我的问题呢?大家能帮忙的就帮一下嘛!谢谢了……55555

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
long long m;

long long ys(long long m)
{
if(m==1) return 2;
    long long i,t,d;
d=2*m+1; 
t=2;
i=1;  
while(true)
    {
     if(t==1) return i*m;
     else if(t==2*m) return i*m-1;
     else t=(t*2)%d;
     i++;
    }
}

int main()
{
  freopen("fyb.in","r",stdin);
  freopen("fyb.out","w",stdout);
  cin>>m;
  if(m==1) cout<<2&