演算法競賽入門經典第五章

2021-07-04 11:39:19 字數 1681 閱讀 7101

例 5.1.3 週期串

fgets(str, max, stdin);

scanf("%s",str);

fgets()函式執行後,str會讀到『\n』符號停下,也就是提取一行,『\n』也被讀進字串,因此strlen(str)會比原本輸入的字串多乙個;除了一種很特殊的情況,讀入一行時,只一行並不是以』\n『結束,而是以eof結束。

scanf()遇到』\n『,space,tab就會停下,而且這些不會被讀入字串,所以strlen的長度即為輸入字串的長度。

#include #include #define max 200

int main()

}if(ok) break;

}printf("%d\n",period);

}

5.2.2 階乘的精確值

#include #include #define max 3000

int arr[max];

int main()

}for(i = max; i > -1; i--)

if(arr[i]) break;

for(i = j; i >= 0; i--) printf("%d", arr[i]);

return 0;

}

5.3.1 6174問題

#include #include #define max 3000

int main()

bubblesort(a, 4);

int n1 = 0, n2 = 0;

for(i = 0; i < 4; i++)

n = n2 - n1;

for(i = 0; i < k; i++)

if(n == answer[i])

answer[k++] = n;

printf("-> %d ", n);

}return 0;

}void bubblesort(int a, int n)

}}

5.3.2 字母重排

#include #include #define max 3000

char word[1000][10], sorted[1000][10];

int cmp_char(const void* _a, const void* _b)

int cmp_string(const void* _a, const void* _b)

int main()

qsort(word, n, sizeof(word[0]), cmp_string);

for(i = 0; i < n; i++)

char s[10];

while(scanf("%s",s) == 1)

}if(found == 0) printf(":(");

printf("\n");

}return 0;

}

summary:

void qsort (void* base, size_t num, size_t size,

int (*compar)(const void*,const void*));

演算法競賽入門經典 第五章 6174

假設你有乙個各位數字互不相同的四位數,把所有數字從大到小排序後得到a,從小到大排序後得到b,然後用a b替換原來這個數,並且繼續操作。例如,從1234出發,依次可以得到4321 1234 3087,8370 378 8352,8352 2358 6174,有趣的是,7641 1467 6174,回到...

演算法競賽入門經典 第五章錯位輸出

include char s 1234567890 qwertyuiop asdfghjkl zxcvbnm,int main return 0 記錄下標還可以當條件滿足的時候退出,這樣迴圈變數就一定是符合要求d 的下標值 要是我我會這麼寫 include char s 1234567890 qwe...

演算法競賽入門經典 第五章6174問題

include include int get next int x sscanf s,d b 輸出氣泡排序拍好的由小到大的數 for int i 0 i n 2 i 輸出由大到小的數 sscanf s,d a sscanf在這裡承擔格式轉換功能 return a b int num 2000 co...