首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

XUPT Online Judge 經典題型 C 語言解法匯總:數學、數論、數組、字符串

     編輯:關於C語言

刷題平台:XUPT OJ

收錄入門必刷的經典題型,附多種解法與優化思路。

題目 1:2 + 22 + 222 + … (n 個 2)

/* 規律:第 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、空輸入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved