C C 面試 3 矩陣程式設計題 模擬法

2021-07-06 03:20:22 字數 3558 閱讀 2705

談談機試吧,雖然一舉通過某知名學府的機試獲得預錄取,但是之後找實習過程中的機試通過率只有10%,十分慚愧。所以特地開了程式設計版,之後繼續有彩蛋(⊙o⊙)哦~

鏈結裡面有很多種方法,在這裡,我只提出一種方法,只要稍加改動,就可以解決螺旋矩陣和回字矩陣了,具有一定的通用性吧。

tips:考慮到這是機試,時間有限,並不排除思維比較活躍的童鞋能夠馬上找到座標與數值的關係,但是「模擬法」是最快最直接的。

1.1.1從中間往外順時針旋轉,如下所示:

tips:一圈一圈地由內向外拓展

#include using namespace std;  

int main()

for (i = 0; i < r; i ++)

for(i = 0; i < r; i++)

delete a;

a = null;

return 0;

}

1.1.2從外向內螺旋矩陣:

1 按順時針方向構建乙個m * n的螺旋矩陣(或按順時針方向螺旋訪問乙個m * n的矩陣):

2 在不構造螺旋矩陣的情況下,給定座標i、j值求其對應的值f(i, j)。

比如對11 * 7矩陣, f(6, 0) = 27  f(6, 1) = 52 f(6, 3) = 76  f(6, 4) = 63

tips:一圈一圈地由外向內走

#include using namespace std;

int main()

for (i = 0; i < r; i ++)

for(i = 0; i < r; i++)

delete a;

a = null;

return 0;

}

題目描述如下:

雙螺旋矩陣的定義如下,矩陣的最中心是1,往上是2,右拐3,向下4,然後依次5、6,7...構成一條順序增大的螺旋線,此外,如果從中心往下走的話,也是一條對稱的螺旋線。題目是給定乙個矩陣維度n,將其列印出來,示例如下。要求在紙上把**寫完整,時間半小時左右。

25    14    15    16    17    18    19

24    13     6     7       8     9      20

23    12     5     2       3    10     21

22    11     4     1       4    11     22

21    10     3     2       5    12     23

20     9      8     7       6    13     24

19    18    17    16    15    14    25

只要從(0,0)開始,一圈一圈往裡走就行了,再根據對稱,把另一半也算出來。

#include using namespace std; 

int dx[4] = ;

int dy[4] = ;

int main()

cnt = 0;

dir = (dir + 1) % 4;

} }for (int i = 0; i < n; i ++)

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

delete a;

a = null;

return 0;

}

tips:其實是不是很像

從外向內螺旋矩陣呢?只要稍加改動就好~\(≧▽≦)/~啦啦啦

11111

12221

12321

12221

11111

#include using namespace std;

int main()

for (i = 0; i < r; i ++)

for(i = 0; i < r; i++)

delete a;

a = null;

return 0;

}

總結:其實就是一圈一圈地由內向外或者由外向內走來模擬這個矩陣的形成。

題目描述:

列印出如下格式的資料:

我自己用模擬法寫的:該辦法一不小心就會出錯(⊙o⊙)哦~

#includeusing namespace std;

int main(void)

y = n - 1;

int max = n*n;

while (y == n-1 && x < n-1)

int j;

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

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

delete a;

a = null;

return 0;

}

比較巧妙的辦法:

解題思路:

如果我們將矩陣變一下形狀,如下:

這樣就變成輸出乙個三角陣了,簡單多了。只是呢,需要在某些行上做一些逆序變換。

奇數 時變換奇數行; 偶數時變換偶數行。

最後按照斜線將數填入原來矩陣中,ok!

#includeusing namespace std;

int main(void)

int **a = new int*[n];

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

//三角形數陣

int num = 1;

for (i = 0; i <= n - 1; i ++)

for (i = n; i < size; i ++)

//逆序變換

int tmp = 1;

for (i = 1; i <= n - 1; i += 2)

} for (; i < size; i += 2)

} //按照斜線填入矩陣

for (i = 0; i <= n - 1; i ++)

} for (i = n ; i < size; i ++)

} for (i = 0; i < n; i ++)

for (i = 0; i < size; i ++)

delete p;

p = null;

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

delete a;

a = null;

return 0;

}

面試模擬題3

一 一年前,湖南公務員可辭職帶薪到民企上班 的新聞曾引起頗多關注。近日,山西 遼寧又分別出台政策,鼓勵公務員下海創業,再次成為大眾議論的焦點。對此,你怎麼評價?測試綜合分析能力 參考要點 1.辯證分析此做法 2.分析此做法對發展經濟的促進作用 3.分析此做法對社會發展的不利影響 4.個人更傾向何種看...

牛客網模擬測試 3 道程式設計題

題目鏈結 給定 n 個整數,將 n 個整數排成一圈,首位相鄰,求出所有排列中相鄰的數的最大差的最小值 例如 98 100 103 105 四個數,排列成 98 103 105 100 這個排列,最大差是 5,是所有可能的排列中最大差最小的 對於已經排序好的數列 1 3 7 8 10 來說,我們從 2...

程式設計思維與實踐 月模擬題3 Blog

題目具體描述不再貼上,如有需要可參照csp模擬考試 csp模擬考試 summon 直接呼叫vector裡面的插入即可 attack 雙方血量減少 並且判斷攻擊方血量是否 0,如果是那麼直接erase 如果被攻擊的不是英雄並且血量 0那麼直接erase end 轉換玩家,進入下一回合。下面是題目的全部...