亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實在是不會做了,求大神幫幫忙捋一捋思路??!

實在是不會做了,求大神幫幫忙捋一捋思路?。?/h1>
慕桂英546537 2022-10-01 13:09:08
【問題描述】從標準輸入中輸入一個N(N<=9)階矩陣和一個M(M<=N)階矩陣,判斷矩陣M是否是N的子矩陣,若是則輸出M在N中的起始位置,若不是則輸出-1。若矩陣M能與N中某一區域完全相等,則稱M是N的子矩陣?!据斎胄问健繌臉藴瘦斎胱x取矩陣。第一行只有一個整數N,代表第一個矩陣的階數。后續有N行輸入,每行有N個以若干空格分隔的整數,代表該矩陣在該行上的所有元素。輸入完N階矩陣后,再在下一行輸入一個整數M,代表第二個矩陣的階數。后續有M行輸入,每行有M個以若干空格分隔的整數,代表該矩陣在該行上的所有元素?!据敵鲂问健枯敵鯩在N中的起始位置,即N中的第幾行第幾列,兩個數字用逗號“,”分隔(從第1行第1列開始計數,即:矩陣第一個元素的位置為:1,1。若N有多個子矩陣與M矩陣完全相同,則輸出首先找到的起始位置,即行最小的位置,若行相同,則為列最小的位置。若M不是N的子矩陣,則輸出-1?!緲永斎搿?3 9 15 25 -9 036 102 2 5 67 898 12 58 6 53 45667 7 895 -12 65 -83-56 812 25 0 72 614 71 69 -4 341 97036 53 456-12 65 -830 72 61【樣例輸出】3,4【樣例說明】第一個矩陣為6階矩陣,第二個矩陣為3階矩陣,第二個矩陣與第一個矩陣的某個子矩陣(起始位置為第3行第4列的3階矩陣)完全相同,故輸出3,4,行列數用逗號隔開。
查看完整描述

2 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

函數在C語言中是必不可少的一部分,大致可以分為兩種:系統定義好的和我們自己寫的。不管是哪種函數,它們都默默地、兢兢業業地完成著屬于自己的任務。只要給它一些參數,它就會把參數處理好、有些函數還會把處理結果返回出來。以下幾種特殊函數,你有見過嗎?會用嗎?

1、靜態函數

普通的函數一般是全局的,可見范圍是跨文件的,比如a.c 這個文件中有一個函數名為 func() , b.c文件 中是可以直接調用a.c中的func函數的。而靜態函數不同,它被static修飾之后可見范圍縮小到本文件可見,其它文件不可見。

如果真的是閑得蛋疼想在一個文件中調用一個別的文件中的靜態函數,也有辦法:

1.直接把func所在的函數包含進來 #include "b.c"

2.可以把static 修飾的函數寫在頭文件中

2、遞歸函數:

這個名字看起來有一點數學味,比較高級的樣子。其實它的定義也很簡單:在一個函數內部調用了自身,那這個函數就是遞歸函數。

下面寫了一個例子:

使用遞歸函數的時候有幾個問題要注意:

1.只有能被遞歸解決的問題才可以使用遞歸來解決。(階乘、冪運算、字符翻轉等)

2.遞歸函數中必須有一個可以直接退出(返回)的條件,否則會進入無限循環。

3.遞歸的過程包含兩個:逐漸遞進,層層回歸。

4.遞歸函數會使用大量的棧內存空間,要注意遞歸的層次不要太深,如果一定要用的話可以嘗試把??臻g的大小臨時設置一下。(ulimit -s)

3.指針函數

這種函數是什么其實很明顯了,指針函數就是返回值是指針類型的函數。

使用的時候要確保該函數的返回值是指針,不然編譯器會報警告。

4、回調函數

函數的實現方,它不方便直接調用該函數,而是由第三方接口來調用該函數,該函數就是回調函數。概念有點繞,我們直接看代碼:

可以看到我們在主函數main里面并沒有直接調用func()函數,而是運用函數指針P通過一個signal函數去調用它。在實際工程中回調函數會用得比較多,就像圖中的signal函數,假設這個函數是從別人手上買回來的,我們無權訪問其源碼,只能夠使用。賣家給我們留下了接口讓我們使用它,因此我給了它兩個參數,當它收到信號2的時候,我希望它能幫我調用我寫的func()函數。那么func()就是所謂的回調函數。

5、內聯函數

如果有一個函數被多次調用,那么該函數在調用過程中會消耗程序執行的時間, 而內聯函數指的就是可以把需要調用的函數副本拷貝到調用者的內部,節約了調用過程中的時間。

普通函數的調用與切換過程:

內聯函數示意圖:

內聯語法:

什么時候應該用內聯函數:一個函數在另一個函數多次被調用,而且被調用函數的內容比較少的情況。

6、變參函數

如果一個函數的參數類型以及參數的數量都是可變的,那么這個函數就稱之為變參函數(如我們常用的printf)。

函數形參在棧中分配內存的順序,從右到左的獨特順序使得第一個參數是棧頂元素(即示例中的參數 format),我們就可以根據第一個已知的參數(綠色)所提供的線索, 來回溯剩下的未知的參數(黃色)


查看完整回答
反對 回復 2022-10-06
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

我給你一個簡版的吧 代碼實在不想全寫 我給你寫個判斷的
for(int i = 0; i < n -m ;i++){ // 這里是第幾行
for(int j =0; j < n-m;j++){ // 這里是第幾列
if(m矩陣第一個值 == n矩陣的i行j列的值){
//這里使用循環去判斷m是不是n的子矩陣,使用兩個循環對比每一個點是否一樣
int x =0,y = 0;
for(x= 0; x < m; x++){
for(y = 0; y < m; y++){
if(arrM[x][y] != arrN[i + x][j+y]){
// 不是子矩陣

}
}

}

if(x == m && y == m){
y和x都等于m表示是子矩陣,輸出i+1和j+1
}
}

}

}


查看完整回答
反對 回復 2022-10-06
  • 2 回答
  • 0 關注
  • 561 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號