[Python] 矩陣運算

因為 Linear Algebra 的 sheng 哥出題不手軟, 所以就把矩陣的各種運算都寫好了! 以免上機的時候腦袋卡住 . . . 行列式: 利用遞迴將陣列縮小,並算出行列式值 遞迴終點為 length==2 (二階行列式定義) 計算原理是 first row 計算 回傳:數字(number) def determinant(m) : length = len(m) if length > 2 : result = 0 coe = [] for i in range(length) : coe.append( (-1)**(i)*m[0][i] ) matrix = [] for j in range(1,length) : row = [] for k in range(length) : if k != i : row.append(m[j][k]) matrix.append(row) result += coe[i]*determinant(matrix) return result else : return m[0][0]*m[1][1]-m[1][0]*m[0][1] 轉置矩陣:...

November 2, 2020 · 3 min · CPP

[C++] NCYU TA課練習03

請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法! #include <iostream> using namespace std; int checkA(int *a, int *b, int *guess); int checkB(int *a, int *b); int main() { int answer[4]; int answerNumber[11] = {0}; for(int i=0;i<4;i++){ cin>>answer[i]; answerNumber[answer[i]]++; } int counter = 1; int guess[4]; while(cin>>guess[0]>>guess[1]>>guess[2]>>guess[3]){ int guessNumber[11] = {0}; for(int i=0;i<4;i++){ guessNumber[guess[i]]++; } int answerA = checkA(answer,guess,guessNumber); int answerB = checkB(answerNumber,guessNumber); cout<<"Case "<<counter<<": "<<answerA<<"A"<<answerB<<"B"<<endl; if ( answerA==4 && answerB==0 ) break; else counter++; } } int checkA(int *a, int *b, int *guess){ int A = 0; for(int i=0;i<4;i++){ if (a[i]==b[i]){ guess[b[i]] = -1; A++; } } return A; } int checkB(int *a, int *b){ int B = 0; for(int i=1;i<10;i++){ if ( b[i]==a[i] && b[i]!...

October 30, 2020 · 1 min · CPP

[C++] NCYU 回家功課11

請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法! 回家功課11 while 是迴圈的一種,只要條件成立(ture),就繼續執行 因為 1 在程式裡可以代表 true ,所以 while(1) or while(true) 就會是無窮迴圈,通常搭配 break 來跳脫迴圈 用一變數來記錄次數,若變數不初始化就做對自己運算則會錯誤: int number; number++; // number = number +1; cout<<number; // 輸出結果會是亂數,因為電腦不知道 number 是多少 判斷奇偶數之前教過囉,可以參考 課堂練習02 程式碼大概如下: #include <iostream> using namespace std; int main() { while(1){ int n; cin>>n; if ( n == -1 ) break; int counter = 0; while(1){ if ( n%2==0 ){ counter++; n /= 2; } else break; } cout<<counter<<endl; } } 如果有任何問題,歡迎私訊跟我討論喔!

October 30, 2020 · 1 min · CPP

[C++] NCYU 回家功課10

請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法! #include <iostream> using namespace std; int gcd(int x, int y){ while(y!=0){ int tmp = x%y; x = y; y = tmp; } return x; }; int main() { int a,b; while(cin>>a>>b){ int GCD = gcd(a,b); cout<<GCD<<" "<<a*b/GCD<<endl; } } 如果有任何問題,歡迎私訊跟我討論喔!

October 30, 2020 · 1 min · CPP

[C++] NCYU 回家功課09

請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法! 回家功課09 先觀察圖形: 輸入 3 就會有 3 行 3 列、輸入 5 就會有 5 行 5 列,所以輸入 n 就會有 n 行 n 列 第一列的 o 在最中間、第 n 列的 o 從中間往兩邊增加,而且最中間那列全為 o (最中間怎麽用 n 表示呢?) 不是 x 的地方就是 o o 的變化很像 擴散 ,每多一行 o 就往兩邊擴散一個,經過中間那列之後,就開始 縮減 要注意是小寫 xo !!!! 程式碼大概如下: #include <iostream> using namespace std; int main() { int n; cin>>n; int center = n/2+1; int offset = 0; for(int row=1;row<=n;row++){ for(int col=1;col<=n;col++){ if ( col>center+offset || col<center-offset ) cout<<"x"; else cout<<"o"; } if ( row<center ) offset++; else offset--; cout<<endl; } } 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 x x x o x x x x x o o o x x x o o o o o x o o o o o o o x o o o o o x x x o o o x x x x x o x x x 如果有任何問題,歡迎私訊跟我討論喔!

October 30, 2020 · 1 min · CPP