本题是一道数学题,先看看这个:
1
3
5
7
9
11
13
15
17
~~~1~~~~~3~~~~~5~~~~~7~~~~~9~~~11~~~13~~~15~~~17
1 3 5 7 9 11 13 15 17
+
1
−
1
+
1
−
1
+
1
−
1
+
1
−
1
+
1
+1 -1 +1 -1 +1 -1 +1 -1 +1
+1−1+1−1+1−1+1−1+1
对于偶数
因为
2
x
2x
2x为偶数,所以
−
1
-1
−1和
+
1
+1
+1为奇数,故偶数倍是不可能的。
对于奇数
n
n
n一定是由
n
/
2
n/2
n/2,
n
/
2
+
1
n/2+1
n/2+1其中一个得来。
如果
n
/
2
n/2
n/2是个偶数,他就是
n
/
2
+
1
n/2+1
n/2+1通过
2
x
−
1
2x-1
2x−1得来,
如果
n
/
2
n/2
n/2是个奇数,他就是
n
/
2
n/2
n/2通过
2
x
+
1
2x+1
2x+1得来。
A C C o d e AC~Code AC Code
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,nn,ans[10010],i;
int main()
{
freopen("amp.in","r",stdin);
freopen("amp.out","w",stdout);
cin>>n;
if(n%2==0)
{
cout<<"No solution";
return 0;
}
else
{
while(n!=1)
{
i++,nn=n/2; //要提前储存,不然只有10分
if(nn%2!=0) //奇数
n=nn,ans[i]=2;
else //偶数
n=nn+1,ans[i]=1;
}
}
cout<<i<<endl;
for(int j=i; j>=1; j--)
cout<<ans[j]<<" ";
return 0;
}