4 条题解

  • 1
    @ 2024-10-3 12:15:46
    #include<bits/stdc++.h>
    using namespace std;
    int a[30];
    int main()
    {
    	int n;
    	cin >> n;
    	if(n%2!=0)
    	{
    		cout << -1;
    		return 0;
    	}
    	a[1]=1;
    	for(int i = 2;i < 26;i++)
    	{
    		a[i]=a[i-1]*2;
    	}
    	for(int i = 25;i >= 2;i--)
    	{
    		if(n>=a[i])
    		{
    			n-=a[i];
    			cout << a[i] << " ";
    		}
    		if(n==0)
    		{
    			return 0;
    		}
    	}
    	return 0;
    }
    

    仅供参考

    • 0
      @ 2024-10-19 16:17:38

      #include<bits/stdc++.h>

      using namespace std;

      int main(){

      int  n;
      
      cin>>n;
      
      if(n%2==1){
      
      	cout<<"-1";
      
      	return 0;
      
      } else {
      
      	for(int i=8388608;i>=2;i/=2){
      
      		if(n>=i){
        
      			cout<<i<<" ";
          
      			n-=i;
          
      		}
        
      	}
      
      }
      
      return 0;
      

      }

      • -1
        @ 2024-10-19 15:00:03
        #include<bits/stdc++.h>
        using namespace std;
        int n;
        bool erdemi(int n){
        	int sum=1;
        	for(int i=1;i<=30;i++){
        		sum*=2;
        		if(sum==n)return true;
        	}
        	return false;
        }
        int zhi(int n){
        	int sum=1;
        	for(int i=1;i<=30;i++){
        		sum*=2;
        		if(sum>n)return sum/2;
        	}
        }
        int main(){
        	cin>>n;
        	if(n%2==1)cout<<-1;
        	else if(erdemi(n))cout<<n;
        	else{
        		while(n){
        			cout<<zhi(n)<<' ';
        			n-=zhi(n);
        		}
        	}
        	return 0;
        }
        

        禁止抄袭

        • -2
          @ 2024-10-19 15:00:06
          #include<bits/stdc++.h>
          using namespace std;
          int n;
          bool erdemi(int n){
          	int sum=1;
          	for(int i=1;i<=30;i++){
          		sum*=2;
          		if(sum==n)return true;
          	}
          	return false;
          }
          int zhi(int n){
          	int sum=1;
          	for(int i=1;i<=30;i++){
          		sum*=2;
          		if(sum>n)return sum/2;
          	}
          }
          int main(){
          	cin>>n;
          	if(n%2==1)cout<<-1;
          	else if(erdemi(n))cout<<n;
          	else{
          		while(n){
          			cout<<zhi(n)<<' ';
          			n-=zhi(n);
          		}
          	}
          	return 0;
          }
          

          禁止抄袭

          • 1

          信息

          ID
          1798
          时间
          1000ms
          内存
          256MiB
          难度
          4
          标签
          递交数
          54
          已通过
          24
          上传者