1. 程式人生 > >PAT:1005 繼續(3n+1)猜想(25 分)C語言

PAT:1005 繼續(3n+1)猜想(25 分)C語言

PAT 1005 繼續(3n+1)猜想(25 分) C語言

#include<stdio.h>

int main()
{
    int n;
    scanf("%d", &n);

    //輸入n個整數 
    int zs[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d", &zs[i]);
    }

    /*
    主要思想:設定一個標誌陣列,預設情況陣列值為0;然後將對應下標為輸入資料 i 的標誌設為1;
    如果資料 i 在遞推過程中出現,那麼標誌位陣列下標為i的那個陣列值設為2。
    然後將下標值為1的存入一個數組,按降序排序輸出 
    */
int biaozhi[101] = {0}; int save[10000] = {0}; int sub=0; int temp; for(int i=0;i<n;i++) { int m = zs[i]; //某個輸入 if(biaozhi[m] == 2) //如果其標誌為2,則跳過 { continue; } biaozhi[m] = 1; //否則設為1 while(m!=1) { if
(m%2==1) { m = (3*m+1)/2; //遞推過程出現的數字 biaozhi[m] = 2; } else { m = m/2; //遞推過程出現的數字 biaozhi[m] = 2; } } } //將陣列值為1的下標存入另一個數組 for(int k=0;k<101;k++) { if
(biaozhi[k] == 1) { save[sub] = k; sub++; } } //降序排序 for(int i=0;i<sub;i++) { for(int j=i+1;j<sub;j++) { if(save[i]<save[j]) { temp = save[i]; save[i] = save[j]; save[j] = temp; } } } for(int k=0;k<sub-1;k++) { printf("%d ", save[k]); } printf("%d", save[sub-1]); }