3 solutions
-
1
#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
这道题,额,有点难
其实很简单ˋ( ° ▽、° )
先读题,
题中说如果是奇数,则乘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; } } } } }方法有些麻烦,请勿吐槽😁
- 1
Information
- ID
- 4527
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 1
- Tags
- (None)
- # Submissions
- 238
- Accepted
- 61
- Uploaded By