2 solutions

  • 2
    @ 2024-12-1 15:06:33

    与C23lingyiyu不同

    我采用字符串存答案再倒序输出

    就可以照常按二进制位从低到高循环

    需要注意的是存储答案的时候也要倒着存

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    string ans="";//答案存这里 
    void dfs(int w){
    	//边界条件判断 
    	if(w==0){
    		ans+="0";
    		return;
    	}else if(w==1){
    		ans+=")0(2";
    		//特别地 倒着存入ans方便倒序输出 
    		return;
    	}else if(w==2){
    		ans+="2";
    		return;
    	}
    	int cnt=0;//存目前搜到哪一位 
    	//开始循环二进制位数 
    	while(w){
    		if(w%2){
    			if(cnt==1){
    				ans+="+2";
    			}else{
    				ans+="+)";
    				dfs(cnt);
    				ans+="(2";
    			}
    		}
    		w>>=1;cnt++;
    	}
    }
    int main(){
    	cin>>n;
    	dfs(n);
    //	cout<<ans<<"\n";
    	for(int i=ans.size()-1;i>0;i--){//倒序 记住别输出ans第一位(那里是'+') 
    		if(ans[i]=='+'&&((ans[i-1]==')'&&ans[i+1]==')')||(ans[i-1]==')'&&ans[i+1]=='2'))) 
    			continue;
    		//这边这个特判排除括号里面的多余加号 
    		cout<<ans[i];
    	}
    	return 0;
    }
    
    • 2
      @ 2024-11-30 16:50:42

      A1208

      #include<bits/stdc++.h>
      using namespace std;
      int n;
      int binpro(int k){
      	if(k==0)return 1;
      	int ans=1;
      	for(int i=1;i<=k;i++)ans<<=1;
      	return ans;
      }
      int maxt(int n){
      	int ans=0;
      	while(binpro(ans)<=n)ans++;
      	return ans-1;
      }
      void dg(int n){
      	if(n==1){
      		cout<<"2(0)";
      		return;
      	}
      	else if(n==2){
      		cout<<"2";
      		return;
      	}
      	else{
      		while(n!=0){
      			int a=maxt(n);
      			if(a==0){cout<<"2(0)";}
      			else if(a==1){cout<<"2";}
      			else{
      				cout<<"2(";
      				dg(a);
      				cout<<")";
      			}
      			n-=binpro(a);
      			if(n!=0)cout<<"+";
      		}
      	}
      }
      int main(){
      	//cout<<maxt(1);
      	cin>>n;
      	dg(n);
      	return 0;
      }
      
    • 1

    Information

    ID
    694
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    17
    Accepted
    5
    Uploaded By