收錄入門必刷的經典題型,附多種解法與優化思路。
/* 規律:第 i 項 = 2 * (10^i + 10^{i-1} + ... + 1) = 2 * (10^{i+1}-1)/9
直接累加即可,注意 n≤9 時 int 足夠,大 n 需高精度 */
#include <stdio.h>
#include <math.h>
#define A 2
int f(int i, int k) { return k * A * (int)pow(10, i); }
int main() {
int n, sum=0, k; scanf("%d",&n); k=n;
for (int i=0; i
題目 2:最大公約數與最小公倍數
/* 輾轉相除法 O(log min(m,n)) */
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int lcm(int a, int b) { return a / gcd(a,b) * b; } // 先除後乘防溢出
int main() { int m,n; scanf("%d%d",&m,&n); printf("%d %d", gcd(m,n), lcm(m,n)); }
題目 3:判斷位數、逆序輸出、正序輸出
int main() {
int a, b[10]={0}, len=0; scanf("%d",&a);
while (a) { b[len++] = a%10; a/=10; }
printf("%d\n", len);
for (int i=len-1; i>=0; i--) printf("%d%c", b[i], i?' ':'\n'); // 逆序
for (int i=0; i
題目 4:水仙花數(三位數,各位立方和等於自身)
int main() {
for (int i=100; i<=999; i++) {
int sum=0, k=i;
while (k) { int d=k%10; sum+=d*d*d; k/=10; }
if (sum==i) printf("%d\n", i);
} // 輸出: 153 370 371 407
return 0;
}
題目 5:完全數(等於所有真因子之和)
void check_perfect(int n) {
int sum=0, a[100], k=0;
for (int i=1; i
題目 6:十個數排序(冒泡/選擇/標準庫)
int main() {
int a[10]; for (int i=0;i<10;i++) scanf("%d",&a[i]);
// 冒泡
for (int i=0;i<9;i++) for (int j=i+1;j<10;j++) if (a[i]>a[j]) { a[i]^=a[j]; a[j]^=a[i]; a[i]^=a[j]; }
for (int i=0;i<10;i++) printf("%d\n", a[i]);
return 0;
}
進階練習方向
類別 推薦題目 核心算法
數論 素數篩、歐拉函數、快速冪 O(n log log n), O(√n), O(log n)
動態規劃 背包、LCS、LIS 狀態轉移方程
圖論 最短路、拓撲排序、並查集 Dijkstra, BFS, Union-Find
字符串 KMP、Trie、AC 自動機 模式匹配
提交技巧
- 輸入用
scanf,大數據量改 fastio(getchar_unlocked)
- 避免遞歸深度過大 → 改迭代
- 開
-O2 編譯優化
- 邊界測試:0、1、MAX_INT、空輸入