3 条题解

  • 1
    @ 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;
    				}
    			}
    		}	
    	}
    }
    

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

    信息

    ID
    4527
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    (无)
    递交数
    214
    已通过
    52
    上传者