3 solutions

  • 1
    @ 2025-7-15 10:41:00
    #include<bits/stdc++.h>
    using namespace std;
    
    signed main() {
        long long n, m;
        scanf("%lld", &n);
        if (n == 1) {
                cout << "End"; 
                return 0;
        }
        while (n != 1) {
            if (n % 2) {
                m = n * 3 + 1;
                printf("%lld*3+1=%lld\n", n, m);
            } else {
                m = n / 2;
                printf("%lld/2=%lld\n", n, m);
            }
            n = m;
        }
        cout << "End";
        return 0;
    }
    
    • 0
      @ 2025-8-22 16:49:59

      这道题,额,有点难

      其实很简单ˋ( ° ▽、° )

      先读题,

      题中说如果是奇数,则乘3加1,如果是偶数,则除以2,最终总能够得到1。

      我们分类讨论,

      先考虑奇数的情况,

      if(a%2!=0){
      		for(;;){
      			s=s;
      			cout<<s<<"*3+1=";
      			s=s*3+1;
      			cout<<s<<'\n';
      			if(s%2==0) break;
      		}
      	}
      

      在考虑偶数的情况,

      for(;;){
      		d=d;
      		cout<<d<<"/2=";
      		d=d/2;
      		cout<<d<<'\n';
          if(d==1){
            cout<<"End";
            return 0;
          }
      	}
      

      不过我们发现中途可能出现奇数的情况,所以要在中间插一段奇数的情况,

      for(;;){
      		d=d;
      		cout<<d<<"/2=";
      		d=d/2;
      		cout<<d<<'\n';
      		if(d%2!=0){
      			if(d==1){
      			cout<<"End";
      			return 0;
      			}else{
      				for(;;){
      					d=d;
      					cout<<d<<"*3+1=";
      					d=d*3+1;
      					cout<<d<<'\n';
      					if(s%2==0) break;
      				}
      			}
      		}	
      	}
      

      这时我们就编好了!!!

      然后是AC完整代码,

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
      	long long a,s,d;
      	cin>>a;
      	s=a;
      	if(a%2!=0){
      		for(;;){
      			s=s;
      			cout<<s<<"*3+1=";
      			s=s*3+1;
      			cout<<s<<'\n';
      			if(s%2==0) break;
      		}
      	}d=s;
      	for(;;){
      		d=d;
      		cout<<d<<"/2=";
      		d=d/2;
      		cout<<d<<'\n';
      		if(d%2!=0){
      			if(d==1){
      			cout<<"End";
      			return 0;
      			}else{
      				for(;;){
      					d=d;
      					cout<<d<<"*3+1=";
      					d=d*3+1;
      					cout<<d<<'\n';
      					if(s%2==0) break;
      				}
      			}
      		}	
      	}
      }
      

      方法有些麻烦,请勿吐槽😁

      • -2

        #include<bits/stdc++.h>

        using namespace std;

        int main(){

        int a;
        
        cin>>a;
        for(int i=1;i<=a;i++){
            if(a%2==0){
            	a=a*3+1;
            else(){
            	a=a/2;
        	}
        	
            }
        	}
        	if(a=1){
        		cout<<"End";
        		break;
        	}
        }    
        

        }

        • 1

        Information

        ID
        4527
        Time
        1000ms
        Memory
        128MiB
        Difficulty
        1
        Tags
        (None)
        # Submissions
        238
        Accepted
        61
        Uploaded By