#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...