我的介绍
本菜鸟又来写简单题的题解了。(>﹏<)
题目描述
用2的整数次幂凑数,凑出来的数就是优秀的拆分,凑不出来的数就不是优秀的拆分。
样例
输入样例1:
20
输出样例1:
16 4
输入样例2:
524288
输出样例2:
524288
打表
此时此刻,我只想说一句话:“打表太好用啦!!!”
打表就是把可能用到的数都存在数组里,例如求平方:
1的平方为1,所以f[1]=1;
2的平方为4,所以f[2]=4;
3的平方为9,所以f[3]=9;
剩下的以此类推。
这道题是数据不大于10000000(10的七次方),而2的二十四次方(16777216)
已经多了,所以打表打到2的二十三次方就可以了。(我是用程序
打表的,不然我得累死)
我打表的程序放在这里了,大家可以借鉴或给我提建议:
#include<iostream>
using namespace std;
int n=16777216;
int s=0;
int main(){
while(n>2){
cout<<n<<",";
n/=2;
}
cout<<2<<endl;
return 0;
}
C++ 代码
#include<iostream>
using namespace std;
int n;
int a[23]={8388608,4194304,2097152,1048576,524288,262144,131072,65536,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2};//打表
int main(){
cin>>n;
if(n%2==1){//是奇数就输出-1,因为它不可能是优秀的拆分
cout<<-1<<endl;
return 0;
}
for(int i=0;i<n;i++){//否则打表遍历
if(a[i]<n){
n-=a[i];
cout<<a[i]<<" ";
}
}
return 0;
}
码字不易,支持一下再走呗§( ̄▽ ̄)§😜