演算法入門例項(一)

2021-07-24 15:42:21 字數 1379 閱讀 7489

在n*n的矩陣中,填入矩陣維度,然後形成乙個蛇形矩陣,例如,當填入維度為4時,形成的蛇形矩陣:

10 11 12 1

9 16 13 2

8 15 14 3

7 6 5 4

可以想象對這個蛇形矩陣的繪製時,是在繪製一條路。筆的起點是在第一行的最後一列。筆的軌跡是下,下,下,左,左,左,上,上,上,右,右,下,下,左,上。那麼關鍵點就在於,何時轉彎,轉彎的時候涉及到了矩陣的邊界,那麼我們就可以通過矩陣的邊界來判斷是否轉彎。

例如:假如我們使用a[x][y]來表示這個矩陣

1,2,3,4由於此時筆是從上到下的,到達4時,此時筆的位置是a[3][3],此時筆再往下(即++x),那麼矩陣將會越界,所以此時我們讓筆的方向改變為從右到左 。

5 , 6 , 7,此時筆的方向是從右到左(即–y),到達7時,此時筆再往左,那麼矩陣將會越界,因此我們改變方向為從下到上。

以此類推

#include 

#define maxn 20

int a[maxn][maxn];

int main()

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

printf("\n");}}

結果:

乙個經典的猜數字遊戲,給定答案序列,每乙個使用者輸入猜的序列,統計有多少個數字猜中(a),有多少個數字在兩個序列都出現過,但是位置不對(b),輸入0序列退出。

例如:

給定答案序列:1,2,3,4

使用者猜1,3,5,6

那麼a和b對應的值為:(1,1)

a很容易得到,只需要判斷輸入的每乙個數在答案序列中是否存在,存在便+1。

b則有點麻煩,可以這樣來實現:統計1-9每乙個數字在答案序列和使用者猜的序列的出現次數分別為c1,c2,取最小的為b。1-9遍歷的b累加,最後減去a,便是在兩個序列都出現過,但是位置不對的數目。

#include 

#define maxn 100

int main()

//輸入猜序列

for(;;)

}if(b[0] == 0) break;

//計算b

for(i = 1; i <= 9; i++)

if(c1 < c2)else

}printf(" (%d,%d)", a, b-a);}}

結果:

分治演算法 入門簡單例項

求最大值和最小值,相信再簡單不過了,只要乙個迴圈遍歷,然後每次比較最大的和最小的值,然後遍歷完後就得到了最大值和最小值了。就是先排序,然後最大值和最小值就是頭尾了。這裡用分治法來求最大值和最小值了。如下 include stdio.h int aa void get max min int s,in...

入門一程式例項

例1.1 hello,world 程式 本例簡單地列印出 hello,world include int main 的第一行是一條預處理偽指令,它告訴c 編譯器在什麼地方尋找第3行中實用的std cout物件的定義。識別符號iostream是標準c 庫中乙個檔案的名字。所有用到標準輸入輸出的c 程式...

Python 程式設計入門例項(一)

程式1 題目 有1,2,4,5個數字,能夠組成多少個互不相同且無重複數字的三位數?都是多少?sum 0 儲存無重複三位數的個數 for i in range 1,5 for j in range 1,5 for k in range 1,5 if i j and i k and j k print ...