1005. 繼續(3n+1)猜想
阿新 • • 發佈:2018-02-25
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)猜想