3 条题解
-
1
这道题,额,有点难
其实很简单ˋ( ° ▽、° )
先读题,
题中说如果是奇数,则乘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
- 上传者