# 方法

窮舉法就是,直接暴力的把所有可能都列舉出來,把符合題意的輸出出來。
對,就是這麼的簡單、直接。
所以,題目真的很少,因為沒有鑑別度
真的會考列出的話,會傾向於考 greedy 和 dfs,都是窮舉的強化

# 例題

# a364: 2. 神秘的進位問題

# 題目

N=C(a,3)+C(b,2)+C(c,1)N = C(a,3) + C(b,2) + C(c,1),且當m<nm<n 時,C(m,n)=0C(m,n)=0,限制a>b>c>=0a>b>c>=0
現在隨便輸入 0~500 隨便一個數,求 abc 的值為何?

# 思路

因為數字只到 500 而且又a>b>c>=0a>b>c>=0,所以一開始從 a=0 開始下去跑,把所有的 N 值對應的情況直接記錄下來
之後,在依照題目的要求,查表輸出就好哩

# 程式碼

int a, b, c, abc[501][3] = {}, ok[501] = {};
for(a = 0; a < 20; a ++) {
    for(b = 0; b < a; b++) {
        for(c = 0; c < b; c++) {
            int N = 0;
            if(a >= 3)  N += a*(a-1)*(a-2)/6;
            if(b >= 2)  N += b*(b-1)/2;
            if(c >= 1)  N += c;
            if(N > 500) break;
            if(ok[N] == 0) {
                ok[N] = 1;
                abc[N][0] = a, abc[N][1] = b, abc[N][2] = c;
            }
        }
    }
}

# a583: 1. 座位距離計算問題

# 題目

給你 M 組座標,求最相近的兩組座標的距離值為何?
一看就知道,水題...

# 思路

把所有點的距離都跑一遍,遇到有更小的就更新,然後輸出出來...
對,窮舉 = 無腦 = 暴力

# 程式碼

int main() {
    int m, x[20], y[20], i, j;
    double tmp, mn = 0xffff;
    scanf("%*d %d", &m);
    for(i = 0; i < m; i++) {
        scanf("%d %d", x+i, y+i);
        for(j = i-1; j >= 0; j--) {
            tmp = sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
            if(tmp < mn)    mn = tmp;
        }
    }
    printf("%.4lf\n", mn);
    return 0;
}

# c049: 00356 - Square Pegs And Round Holes

# 題目

在一個邊長為 2n 的正方形棋盤中央畫一個直徑為 2n-1 的圓,以下的圖為 n=3,

寫一個程式判斷有多少個格子是一部份在圓中,以及有多少個格子是完全被包含在圓當中。

# 思路

先去窮舉 1/4 圓的格子情形,再去乘 4
利用畢氏定理判斷格子的四個點是否都在圓內,或部分在園內

# 程式碼

#define AllinRange r1<=range&&r2<=range&&r3<=range&&r4<=range
#define PartinRange r1<=range||r2<=range||r3<=range||r4<=range
int range = (2*n-1)*(2*n-1);
for(int i=0; i<n+1; i++){
    for(int j=0; j<n+1; j++){
        int r1, r2, r3, r4;  // 左下 右下 左上 右上
        r1 = 4*(i*i + j*j);
        r2 = 4*((i+1)*(i+1) + j*j);
        r3 = 4*(i*i + (j+1)*(j+1));
        r4 = 4*((i+1)*(i+1) + (j+1)*(j+1));
        if(AllinRange)
            count_all++;
        else
            if(PartinRange)
                count_part++;
            else
                break;
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay