666 - CS135000_mid2_exercise Scoreboard

Time

2014/12/11 00:00:00 2014/12/11 00:00:00

Clarification

# Problem Asker Description Reply Replier Reply Time For all team

# Problem Pass Rate (passed user / total user)
10354 反矩陣
10355 神奇數學迴圈
10356 警察打壞人
10357 氣泡排序法
10358 多項式乘法

10354 - 反矩陣   

Description

若一個nxn的方形矩陣A存在一個B使得AB = BA = In ,則B稱為A的反矩陣。

現給予一個3x3的矩陣A,求A的反矩陣。

舉例:

注意本題要求反矩陣的數值若為分數須化為最簡分數,且分母須為正數。

 

反矩陣公式:

 

以下是範例code的一部分:

#include

int 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




10355 - 神奇數學迴圈   

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




10356 - 警察打壞人   

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




10357 - 氣泡排序法   

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

#include 
  

Input

Input有兩行: 
第一行包含一個整數N0),表示需要排序的數列中數字的個數。
第二行包含由N個數字組成的數列,數字與數字之間用空格符號分開。

Output

Output中你需要印出經過排序後的數列。
注意在數列結尾處要添加換行符號。

Sample Input  Download

Sample Output  Download

Tags




Discuss




10358 - 多項式乘法   

Description

Input中包含兩個多項式f(x)g(x)

f(x) = amxm + a(m-1)x(m-1) + + a1x1 + a0x0
g(x) = b
nxn + b(n-1)x(n-1) + + b1x1 + b0x0
where m,n
N, 0≤m,n≤10.

請計算h(x) = f(x)g(x)
注意所有係數皆為整數。

Input

m
a
m a(m-1)  … a1 a0
n
b
n b(n-1)  … b1 b0

注意係數之間用空格符號分開。

Output

h(x)的所有係數降幂排列後,用"%d "印出所有係數並在结尾添加換行符號。

Sample Input  Download

Sample Output  Download

Tags




Discuss