1. 程式人生 > >1005. 繼續(3n+1)猜想

1005. 繼續(3n+1)猜想

include for scanf 標記 n) 輸出 pos stdlib.h 題目

題目截圖:

技術分享圖片

思路:

  對輸入的每個數字進行驗證,並標記已經驗證過的數字。最後沒有標記的即為所求的關鍵數。

代碼:

 1 /*
 2     1005. 繼續(3n+1)猜想
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 
11 #define maxn 10001
12 int p[maxn] = {0};        // p[i]=1 表示 i 已驗證 
13 int v[maxn] = {0}; // 存儲輸入數據 14 15 // 逆序 16 int cmp(const void* a, const void* b) { 17 return *(int*)b - *(int*)a; 18 } 19 20 int main() { 21 int k, i, n, flag=0; 22 scanf("%d", &k); 23 for(i=0; i<k; ++i) { 24 scanf("%d", &n); 25 v[i] = n; 26 while
(n != 1) { // 模擬 3n+1 猜想 27 if(n & 1) { // 奇數 28 n = n*3+1; 29 } 30 n /= 2; 31 p[n] = 1; // 標記為已驗證 32 } 33 } 34 qsort(v, k, sizeof(int), cmp); // 逆序排序 35 for(i=0; i<k; ++i) { //
按格式輸出 36 if(!p[v[i]]) { 37 if(flag) { 38 printf(" "); 39 } 40 printf("%d", v[i]); 41 flag = 1; 42 } 43 } 44 45 return 0; 46 }

1005. 繼續(3n+1)猜想