和海王一起從零刷題之1 回形陣列

2021-10-24 18:21:58 字數 1654 閱讀 3701

這個oj需要登入才能使用,不過裡面的題都還挺好的,從簡單到複雜,分門別類。感興趣的可以用一用,不感興趣可以直接看下面。

簡單,適合學完基礎語法的同學,只需要了解迴圈,陣列等知識。

輸入乙個正整數n,輸出n×n的回形方陣。例如,n=5時,輸出:

111

1112

2211

2321

1222

1111

11

正整數n(2<=n<=10)

回形矩陣,每行最後乙個數字沒有空格。

建立乙個二維陣列,然後從外圈,依次往內圈填充,然後輸出。

找出每一行的規律,逐行列印,稍微有點複雜。規律是這樣的:

因為上下是對稱的,所以先考慮前面一半的行數:

我畫了3條線,這樣也許你就能看出來規律了:

第一行:依次列印: |11111|

第二行: 依次列印:1->1|222|1->1

第三行:依次列印: 1->2|3|2->1

注:1->2表示從1列印到2,即輸出1 2, |表示分割列印步驟

這樣一來,每行的列印其實被劃分為了三個步驟,只要我們實現這三個函式,就可以了。

#include

#include

using namespace std;

//填充函式:每次執行會填充一圈,從外側開始

void

outside

(int a[

10],int c,

int n,

int n)

intmain()

//輸出a

for(

int i=

0;icout<

}}

其實是在*pt=xx 這個語句處都可以直接把xx輸出的,但是因為格式要求無法滿足,不知道**是行的最後乙個輸出,只能先存到陣列中再輸出,不過此處因為我們是嚴格按照行的順序產生元素的,所以直接用一維陣列儲存就可以了。

#include

#include

using namespace std;

//從n列印到p,實現n->p的功能,將每行第一步和第三步合為乙個函式

int*

couta

(int

*pt,

int n,

int p)

}//從大到小

else

}return pt;

}//列印n個p

int*

coutn

(int

*pt,

int n,

int p)

return pt;

}int

main()

//輸出剩餘的行,因為是對稱的,只需要i從大到小反著輸出一次就行,根據上面假設,則輸出為3,2,1

for(

int i=n/2-

1;i>=

0;i--

)//輸出一維陣列

for(

int i=

0;icout<

}}

最後再推薦一下這個oj,leecode我認為對初學者難度太高了。

和海王一起從零刷題之2 大數加法

這是乙個面試很喜歡問的問題,也不算很複雜。要把a,b兩個很大的數 超過了long long 的表示範圍,相加並得出結果。應該如何做?簡單,需要掌握陣列,字串等知識,但容易出錯。假設a 12345 b 56789 由於a,b太長了,這裡只取前五位說明 接收應該用2個字串陣列來接收a,b。儲存a 123...

和融躍一起零基礎學習FRM

frm被稱為是 無法自學通過 的考試,對於零基礎考生來說,首先就必須要對自己的備考進行規劃,留下充足的複習時間,才能夠順利通過考試。garp協會的建議是15周的時間通過一門考試,需要根據自己的實際情況進行調整,找出最適合自己的備考方案。把自己的備考分成四個階段 第一階段,通讀階段 結合考試大綱將考試...

和菜鳥一起學c之函式指標

還有sd卡的檔案格式識別還不會,等明天和飛刀一起討論下,基本的android的sd卡的自動掛載已經實現了,可惜只支援fat格式的,ext格式的他不支援,新增了那些其他格式的掛載還是不行,主要是識別還不知道怎麼去實現。好了,既然這麼著,還是把以前看的一些函式指標做個記錄吧。因為linux驅動中很多很多...