PAT (Basic Level) Practice (中文)1005 繼續(3n+1)猜想 (25 分)_C語言實現
阿新 • • 發佈:2018-12-07
- 題目地址
- 題目解析:這裡我的處理方式有一定簡潔性,可供參考。
- 我的程式碼:
#include<stdio.h> int main() { int n,aa[101]={0};//構建包含下標2-100的陣列(輸入的數字的範圍)記錄每次運算的情況 scanf("%d",&n); //0代表未輸入且未出現在驗證過程中; for(int i=0,pos;i<n;i++)//1代表關鍵數;3代表覆蓋數;2代表未在輸入中但被覆蓋了 { scanf("%d",&pos); aa[pos]++; while(pos!=1&&pos<101?aa[pos]<3:1)//這裡?:運算是為保證陣列不越界 { //這個演算法有個缺陷就是 if(pos%2) //為了節省程式碼量 pos=3*pos+1; //超過100的數字未記錄 if((pos/=2)<101) //運算過程中會重複計算 aa[pos]+=2; } } for(int i=100,mark=0;i>1;i--) if(aa[i]==1&&mark++==0) printf("%d",i); else if(aa[i]==1) printf("%c%d",' ',i); return 0; }