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