| # | Problem | Pass Rate (passed user / total user) |
|---|---|---|
| 10354 | 反矩陣 |
|
| 10355 | 神奇數學迴圈 |
|
| 10356 | 警察打壞人 |
|
| 10357 | 氣泡排序法 |
|
| 10358 | 多項式乘法 |
|
Description
若一個nxn的方形矩陣A存在一個B使得AB = BA = In ,則B稱為A的反矩陣。
現給予一個3x3的矩陣A,求A的反矩陣。
舉例:
.jpg)
注意本題要求反矩陣的數值若為分數須化為最簡分數,且分母須為正數。
反矩陣公式:
.jpg)
以下是範例code的一部分:
#includeint a[3][3]={0},nu[3][3]={0},de[3][3]={0},div[3][3]={0}; //a[3][3] is input, nu[3][3] is the numerator of output, de[3][3] is the denominator of input, div[3][3] is gcd of nu[3][3] and de[3][3] int i,j,det=0; void show(); void simple(); int gcd(int x,int y); int main(void) { for(i=0;i<3;i++){ for(j=0;j<3;j++){ scanf("%d",&a[i][j]); } } /* your code */ simple(); show(); return 0; } void show(){ for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%4d",nu[i][j]/div[i][j]); printf("\n --- --- ---\n"); for(j=0;j<3;j++) printf("%4d",de[i][j]/div[i][j]); printf("\n\n"); } } void simple(){ for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(nu[i][j]!=0) if(de[i][j]>0) div[i][j]=gcd(abs(nu[i][j]),abs(de[i][j])); else div[i][j]=-gcd(abs(nu[i][j]),abs(de[i][j])); else{ de[i][j]=0; div[i][j]=1; } } } } int gcd(int x,int y){ if(x%y==0) return y; else return gcd(y,x%y); }
Input
3x3矩陣A
Output
A的反矩陣
Sample Input Download
Sample Output Download
Tags
Discuss
Description
請詳閱以下步驟解出題目:
1. 給定一數值A,將A的每一位數由大到小重新排列變成新數值B。
2. 另外將A的每一位數由小到大重新排列變成另一新數值C。
3. 做B-C
4. 將B-C的結果重頭重覆做1. 到3. 。
5. 若是B-C的結果重覆到先前的B-C,此迴圈結束。
6. 求出3. 的執行次數。
ps. 一開始的數值不會是0。
舉個例子,若A=3412,則B=4321、C=1234。
根據上面的演算法,依序會在3. 算出4321 - 1234 = 3087;8730 - 378 = 8352;8532 - 2358 = 6174;7641 - 1467 = 6174。
則3.的執行次數為4。
Input
一個四位數的數值
Output
3.的執行次數,注意最後要有換行符號
Sample Input Download
Sample Output Download
Tags
Discuss
Description
你現在是一個警察,有一些壞人躲在障礙物後方,你將會根據一些指令朝他們射擊。
假設現在有一個二維陣列的場地,壞人躲在最上一列,從第二列到倒數第二列會有一些障礙物,而你在最下一列。若想擊倒躲在障礙物後方的壞人,你必須先破壞障礙物。
每個壞人與障礙物都有一個耐久值(HP),若你朝障礙物射擊,它的HP會減1。同樣地,若朝壞人射擊,他的HP會減1,若HP歸0則壞人被擊倒。
可以參考下面的圖片瞭解實際的情況

(尺寸:4x3)
Input
第一行有兩個值I, J,代表場地的大小。I為鉛直軸,J為水平軸。3<=I, J<=5。
第二行會有J個值,分別代表第一列中每一格的壞人其耐久值。若數值是0,代表這一格沒有壞人。
接下來有I-1行,每一行皆有J個值,分別代表從第二行到最後一行中,每一行中放障礙物的地方。與壞人的放置相同,若數值是0,代表這一格沒有障礙物。
耐久值只介於1到9之間。
最後一行將會給予一段指令,要求你在哪一行射擊,最後用'e'代表指令結束。例如指令若為'1 2 1 e',代表你再依序在第一行、第二行、第一行射擊。指令的長度不超過10。
Output
指令結束過後該場地的狀況,顯示方式與input裡的場地顯示類似。
請用"%2d"顯示場地中每一格的數值,每一列最後要用換行符號。
Sample Input Download
Sample Output Download
Tags
Discuss
Description
氣泡排序法(Bubble Sort)是排序演算法(sorting algorithm)中較簡易的一種。其運作的原理是藉由逐次比較相鄰的兩筆資料,並依照排序條件(由大至小或由小至大)交換資料直到排序完成為止。
Step-by-step example
接下來我們就用氣泡排序法來對“5 1 4 2 8”這個數列由小至大進行排序。每一步我們都會對紅色的那組數字進行比較,接下來是範例演示:
( 5 1 4 2 8 ) → ( 1 5 4 2 8 ). 首先比較前兩個數。因為5 > 1,所以交換位置。
( 1 5 4 2 8 ) → ( 1 4 5 2 8 ). 因為5 > 4,所以交換位置。
( 1 4 5 2 8 ) → ( 1 4 2 5 8 ). 因為5 > 2,所以交換位置。
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ). 現在因為這兩個數已經符合由小至大的順序,所以不用交換。
我們可以發現,經過第1輪的4次比較之後,最大數字8已經被確定了。
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ).
( 1 4 2 5 8 ) → ( 1 2 4 5 8 ). 因為4 > 2,所以交換位置。
( 1 2 4 5 8 ) → ( 1 2 4 5 8 ).
我們可以發現,經過第2輪的3次比較之後,第二大的數字5已經被確定了。
·
.
.
<(5-1=4)-th Pass>
經過這一輪比較,最小的數字1就被確定了。
你可能會需要寫兩層for-loops (nested for-loops):
1. 外層的for-loop 做n-1 輪大迴圈。
2. 內層 for-loop 執行每一輪內的換位操作。
接下來會提供一段不完全的範例code:
#includeInput
Input有兩行:
第一行包含一個整數N(0),表示需要排序的數列中數字的個數。
第二行包含由N個數字組成的數列,數字與數字之間用空格符號分開。Output
在Output中你需要印出經過排序後的數列。
注意在數列結尾處要添加換行符號。Sample Input Download
Sample Output Download
Tags
Discuss
Description
Input中包含兩個多項式f(x)和g(x):
f(x) = amxm + a(m-1)x(m-1) + ⋯ + a1x1 + a0x0
g(x) = bnxn + b(n-1)x(n-1) + ⋯ + b1x1 + b0x0
where m,n∈N, 0≤m,n≤10.
請計算h(x) = f(x)g(x)。
注意所有係數皆為整數。
Input
m
am a(m-1) … a1 a0
n
bn b(n-1) … b1 b0
注意係數之間用空格符號分開。
Output
h(x)的所有係數降幂排列後,用"%d "印出所有係數並在结尾添加換行符號。