PAT乙级1005
1005 继续(3n+1)猜想 (25 分)
#include<bits/stdc++.h> using namespace std; int a[10000],b[105],c[105],ans; int main() { int n,t; cin>>n; for(int i=0;i<n;i++) cin>>b[i]; sort(b,b+n); for(int i=0;i<n;i++) { t=b[i]; while(t!=1) { if(t&1) t=(3*t+1)/2; else t/=2; a[t]=1; } } for(int i=n-1;i>=0;i--) { if(a[b[i]]==0) { ans++; c[ans]=b[i]; } } for(int i=1;i<=ans;i++) if(i!=ans) cout<<c[i]<<" "; else cout<<c[i]; return 0; }
1.一开始a[]数组开大小也为105,出现段错误,后来想到当一个100内的数为奇数则会(*3+1)/2,可能超出105的大小范围,所以段错误了。
2.一开始没有注意题目中的 “一行中最后一个数字后没有空格”,导致错误。