《演算法競賽入門經典》中有代表性的程式設計思想

2021-09-10 10:55:30 字數 1748 閱讀 9101

#include #include #include using namespace std;

int is_valid_number(int num, int array)

array[x] = array[y] = array[z] = 1;

return 1;

}int main()

} system("pause");

return 0;

}

《演算法競賽入門經典》(第2版) 程式3-3 蛇形填數

蛇形填數。在n×n方陣裡填入1,2,…,n×n,要求填成蛇形。例如,n=4時方陣為:

10 11 12  1

9  16 13  2

8  15 14  3

7   6   5   4

上面的方陣中,多餘的空格只是為了便於觀察規律,不必嚴格輸出。n≤8。(程式設計思想:先找到填數規則,即從第一行最後一列開始按照下——左——上——右——下的順序填數,在未滿足轉向條件時按照既定方向一直填下去,所以這裡主要使用while迴圈加上轉向條件判斷)

#include#include#define maxn 20

int a[maxn][maxn];

int main()

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

return 0;

}

《演算法競賽入門經典》(第2版) 程式3-4 豎式問題

豎式問題。找出所有形如abc*de(三位數乘以兩位數)的算式,使得在完整的豎式中,

所有數字都屬於乙個特定的數字集合。輸入數字集合(相鄰數字之間沒有空格),輸出所有

豎式。每個豎式前應有編號,之後應有乙個空行。最後輸出解的總數。具體格式見樣例輸出

(為了便於觀察,豎式中的空格改用小數點顯示,但所寫程式中應該輸出空格,而非小數

點)。樣例輸入:

2357

樣例輸出:

<1>

..775

x..33

-----

.2325

2325.

-----

25575

the number of solutions = 1

(程式設計思想:把所有要查詢的數用sprintf以字串的形式存在乙個字元陣列裡,遍歷這個陣列,用字串查詢函式strchr查詢是否存在)

#include#includeint main()

} printf("the number of solutions = %d\n", count);

return 0;

}

《演算法競賽入門經典》(第2版) 例題3-5 生成元

如果x加上x的各個數字之和得到y,就說x是y的生成元。給出n(1≤n≤100000),求最小生成元。無解輸出0。例如,n=216,121,2005時的解分別為198,0,1979。(程式設計思想:對於數量有限且輸入和輸出一一對應的問題,可以先生成對應表,再用查表法得出對應解,可以極大提公升程式執行速度)

#include#include#define maxn 100005

int ans[maxn];

int main()

if (ans[y] == 0 || m < ans[y]) ans[y] = m;//ans[y]對應的生成元是m

} scanf("%d", &t);

while (t--)

return 0;

}

軟考 各種策略和相關的代表性演算法

分治法的設計思想是 將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。1 二分搜尋 2 大整數乘法 3 strassen矩陣乘法 4 棋盤覆蓋 5 合併排序 6 快速排序 7 線性時間選擇 8 最接近點對問題 9 迴圈賽日程表 10 漢諾塔 動態規劃過程是 每次決策依...

演算法競賽入門經典3 2單詞的長度

剛開始用了個笨方法,用fgets輸入所有字串後,計算長度。第二種是輸入時用scanf迴圈乙個乙個的輸入字串,並在這個過程計算每個單詞的長度和個數 要注意fgets函式會讀入enter鍵,n 而scanf函式遇到空格即會停止輸入。熟悉字串的處理函式 include include include in...

演算法競賽入門經典 DAG上的動態規劃

矩形巢狀 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a include include include using namespace std const int ma...