【noip1998】題解:2的冪次方
阿新 • • 發佈:2021-08-22
思路:設遞迴函式dfs(x)用於輸出x的冪次方
最容易的思路:0不輸出,1輸出為2(0),2輸出2,剩下的遞迴執行。
每一次遞迴:例如7,拆分為4+3,先拆出最大的是2的次方的數出來,輸出4,再把3分拆輸出。
對於3,拆分為2+1。
程式碼:
1 //flag用於標記輸出時前面是否需要加+號 2 #include<bits/stdc++.h> 3 using namespace std; 4 int n; 5 void dfs(int n,bool flag){ 6 if(n==0)return; 7 if(flag)cout<<"+"; 8 if(n==2)cout<<"2"; 9 else if(n==1)cout<<"2(0)"; 10 //else if(n==0)return; 11 else{ 12 int i; 13 for(i=0;;i++){ 14 if(pow(2,i)>n)break; 15 } 16 i--; 17 if(i==1)cout<<"2"; 18 else{ 19 cout<<"2("; 20 dfs(i,0); 21 cout<<")"; 22 } 23 dfs(n-pow(2,i),1); 24 } 25 } 26 int main(){ 27 cin>>n; 28 dfs(n,0); 29 }