程式設計作業(1)修正

2021-10-03 13:39:51 字數 3986 閱讀 5537

作業:

習題課作業:

用更快更好的演算法算上課第乙個演示程式(找前個數字之和等於後幾個數字之和的數的個數。如abcdef,

需a+b+c=d+e+f)。並且能夠在程式中比較方法之間的優劣:記憶體占用,執行時間等引數。

寫在前面

1, 如何在遞迴中使用指標來表示陣列結尾(傳入乙個一直指向指標頭部的引數, 並利用它表示出陣列的範圍)

2,指標引數的自增需要注意是先增還是後增,尾遞迴add(arr++, p)和add(++arr, p)是不同的結果

3,多維陣列的宣告需要將雙箭頭用空格隔開 std::vector> //right!

4,for迴圈的終止條件和變化方式是不一定必須寫在開頭括號裡的,也可以寫在迴圈體內部以便靈活使用

5,vector的push_back,只可以push進其「規定型別」的「乙個」元素。

eg:三維陣列可push進乙個二維陣列,一維int陣列push進入乙個int

6,在多層迴圈中可以將一些語句盡量放在外層迴圈中,時間複雜度不變,但是可以減少運算量

7, 函式作為引數傳到另乙個函式時,使用函式指標, 該函式的引數只需要寫出資料型別就好

eg: func2(int (*func)(int, int) )

8,通過更縝密的數學推理,可以獲得更優美的**

有關拓展|| 為了求陣列中每乙個數的平方和,寫了個使用指標的遞迴函式 稍微複習

//明確函式功能:求出放入的陣列的平方

//定好尾頭:尾:陣列中無值 頭:第乙個數求好平方後加第二個數的平方

intadd

(int

* arr,

int*p)

|| 可以用c++自製乙個python中的map高階函式,用於返回陣列的個元素平方和

int mymap(

int(

*func)

(int

), vector<

int> arr)

return res;

}int sqrt(

int x)

-> vector<

int> arr =;-

>

int res = mymap(sqrt, arr)

;

|| 回憶類似寫法的leetcode題,使用雙指標使得陣列返回三數之和的

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[ [-1, 0, 1],

[-1, -1, 2]

]解題思路:最重要的是去重操作(即跳步操作)

#include

using

namespace std;

#include

#include

class

solution

elseif(

*left +

*right > target)

else

; res.

push_back

(tmp_res)

;int v =

*left;

while

(left != right &&

*left == v) left++

;//跳過相等的元素

v =*right;

while

(left != right &&

*right == v) right--

;//跳過相等的元素}}

while

(it != nums.

end()-

2&&*it == tmp) it++

;//跳過相等的元素}}

};

解題思路:解優化題:正常的思路

正常的思路是使用多層迴圈,在多層迴圈中可以將一些語句盡量放在外層迴圈中,時間複雜度不變,

但是可以減少運算量 eg: 將a+b在外層提前運算後,再將其和放進內層中運算

#include

using

namespace std;

#include

intmain

(int argc,

char

** ar**)}}

} cout<<

""<< endl;

cout <<

"result:\t "

<< res << endl;

cout <<

"///"

<< endl;

return0;

}

更高效的演算法

通過位數最高值為 0~6 的 6位數 尋找規律,可以獲得下圖規律

6位數 需要 分成兩個3位數,若該6位數滿足條件則其兩個3位數之和相等,求出三位數每種和可能出

現的種類,其該和的三位數種類^2 (排列組合) 即成功搭配出所有滿足條件的6位數。

eg: 和為2的三位數 110 /101/011 /020/200/002 它們進行搭配可得出滿足條件的6位數

因此我們將目光放在3位數上

1,先獲得三位數為 00n ,0nn,和nnn的情況,即三位數的位數之和為1-18的所有情況,我們使用矩陣

注意:(x,y)中,x是可能的位數和,通過y可以將每個x值對應的y值求和得到∑y,

2,如圖:黃色部分每個位上可能出現的數字,黃色部分下方/右方的數字是其對應黃色數字已有的搭配

圖一表示兩位數與兩位數,其每個和(即x)的搭配結果(即∑y)稱為圖二對應的左列!

注意:兩位數之間的搭配結果剛好是個d=1遞增的數列 【1,2,3,4,5,6,5,4,3,2,1】

重複以上步驟,可求出結果,修改相關資料可求出0~x 任意位數的符合條件解

以下關於0~6 的 6位數的運算**,根據規律改動相關資料即可稱為 0~x 任意位數 的**

#include

using

namespace std;

#include

int***

spisok()

for(

int x =

0; x <

11; x++);

for(

int y =

0; y <

6; y++)}

return arr_np3d;

}int

getres()

;int res =0;

for(

int x =

0; x <

11; x++)}

for(

int i =

0; i <

16; i++

)return res;

}

需要編寫下列函式:

1,求2位數間搭配數,引數為每乙個 位數上的最大數,返回值為其各種和搭配數的陣列

2,求3位數間的搭配數,引數為1中的陣列,建立三維陣列 表示3位數間的搭配數情況,返回值為其各種和搭配數的陣列

3,利用陣列求平方和即為結果

物件導向程式設計作業1

github鏈結 行數 debug數 總耗時238 410h左右 雖然寒假經歷了數次的寒假作業學習c 的課程,但是寒假的電梯排程中,都只是簡單的使用c 內容,如輸入輸出,其他方面都仍然習慣性的使用c語言。如寒假都是使用的struct結構體,這一次跟著作業要求才真正去使用類,這一次作業也是第一次去建立...

現代程式設計 作業 第1次

第 0 次作業已經在課堂上做了。1 建立 github 賬戶,把課上做的 最大子陣列之和 程式簽入 3 搞到一本教科書 三本中選一本 並在部落格中說明自己選的是哪一本。4 閱讀下面的部落格 個人軟體開發流程 personal software process,程式效能分析 單元測試 在最小的程式設計...

XTU C語言程式設計實踐作業1

1.請計算答案使用浮點輸出一行,不要輸出多餘的零,行尾有回車。c語言使用 g輸出 這個題主要是迴圈,判斷迴圈多少次for 和while 都可以 include int main printf g n b 2.請計算 答案輸出一行,不要輸出多餘的零,行尾有回車。c語言使用 g輸出 這個題沒什麼難點 就...