# 608 棒球計分 ``` 1. 請撰寫一程式,製作棒球打擊計分器,讓使用者輸入十個0~4之間的整數,輸入0代表打者被三振,輸入1代表一壘安打,以此類推,輸入4代表全壘打,最後輸出十個打擊數結束後,此局的得分。 2. 棒球計分規則:若打出一壘安打則一壘有人,以此類推,若打出全壘打,壘上所有人包含自己皆能得分。假設目前壘上無人,在打出二壘安打後,接著打出一壘安打,則會向前推進一個壘包造成一、三壘有人,若再打出二壘安打,則一、三壘向前推進兩個壘包,獲得1分,並且二、三壘有人。若十個打擊數結束後,壘包上還有人,則為殘壘不得分。 輸入說明 十個0~4之間的整數 輸出說明 得分數 範例輸入 3 1 2 2 3 1 4 0 0 1 範例輸出 score = 7 https://ithelp.ithome.com.tw/articles/10197956 #include <stdio.h> #define LEN 10 int main() { int num; //打擊結果 int base[4]={0}; //跑壘狀態,0壘上無人、1壘上有人,陣列索引分別對應,0:本壘, 1:一壘, 2:二壘, 3:三壘 int point=0; //分數 for (int i=0; i<LEN; ++i) { scanf("%d", &num); if (num) { base[0] = 1; //將打擊者放在本壘 for (int x = 3; x >= 0; x--) { if (base[x] == 1) //如果壘上有人 { if (x + num >= 4) //回到本壘 point++; else //未回到本壘 base[x + num] = 1; base[x] = 0; } } } } printf("score = %d", point); } ``` # 610 矩陣乘積 ``` 請撰寫一程式,讓使用者建立兩個矩陣,先輸入兩個正整數a、b,代表第一個矩陣為a x b矩陣,接著再輸入a x b矩陣的元素;第二個矩陣作法相同,最後輸出兩矩陣相乘的結果,同一列的矩陣元素請使用半形空格隔開,若無法相乘,請輸出「error」。 矩陣乘法:若A是mxn的矩陣,B是nxp的矩陣,則它們的乘積AB是 mxp的矩陣。 公式: 輸入說明 兩組矩陣維度及矩陣元素 輸出說明 兩矩陣相乘的結果 範例輸入1 2 3 1 2 3 4 5 6 3 2 1 2 3 4 5 6 範例輸出1 22 28 49 64 範例輸入2 2 1 5 5 2 3 4 5 6 7 8 9 範例輸出2 error #include <stdio.h> #define LEN 2 int main() { char* p=" "; char* q="\n"; int row[LEN], col[LEN]; scanf("%d %d", &row[0], &col[0]); int x[row[0] ][col[0] ]; for (int i=0; i<row[0]; ++i){ for (int j=0; j<col[0]; ++j){ scanf("%d", &x[i][j]); } } scanf("%d %d", &row[1], &col[1]); int y[row[1] ][col[1] ]; for (int i=0; i<row[1]; ++i){ for (int j=0; j<col[1]; ++j){ scanf("%d", &y[i][j]); } } int z[row[0] ][col[1] ]; if (col[0]==row[1]){ for (int i=0; i<row[0]; ++i){ for (int k=0; k<col[1]; ++k){ z[i][k]=0; for (int j=0; j<col[0]; ++j){ z[i][k] += x[i][j]*y[j][k]; } if (k==col[1]-1) p = ""; printf("%d%s", z[i][k], p); p = " "; } if (i==row[0]-1) q = ""; printf("%s", q); } } else printf("%s", "error"); } #include <stdio.h> #define LEN 2 int main() { int row[LEN], col[LEN]; scanf("%d %d", &row[0], &col[0]); int x[row[0] ][col[0] ]; for (int i=0; i<row[0]; ++i){ for (int j=0; j<col[0]; ++j){ scanf("%d", &x[i][j]); } } scanf("%d %d", &row[1], &col[1]); int y[row[1] ][col[1] ]; for (int i=0; i<row[1]; ++i){ for (int j=0; j<col[1]; ++j){ scanf("%d", &y[i][j]); } } int z[row[0] ][col[1] ]; if (col[0]==row[1]){ for (int i=0; i<row[0]; ++i){ for (int k=0; k<col[1]; ++k){ z[i][k]=0; for (int j=0; j<col[0]; ++j){ z[i][k] += x[i][j]*y[j][k]; } printf("%d ", z[i][k]); } puts(""); } } else printf("%s", "error"); } ``` # 702 二進位轉十進位 ``` 請撰寫一個程式,讓使用者輸入一個10字元以內的二進位字串,將其轉換成十進位並輸出。 輸入說明 一個二進位字串 輸出說明 轉換成十進位的結果 範例輸入 1100 範例輸出 12 #include <stdio.h> int binaryToDecimal(int); int main() { int n; scanf("%d", &n); printf("%d", binaryToDecimal(n)); } int binaryToDecimal(int n) { int x=0, i=1; while (n!=0) { x += (n % 10)*i; n /= 10; i *= 2; } return x; } ``` # 704 過半數(計算次數、找最大值) ``` 請撰寫一程式,讓使用者輸入一個正整數n(1 < n ≤ 15),接著輸入n個整數,判斷此數列中是否有數值出現的次數超過半數。若有,請輸出此數值為何;若無,請輸出「error」。 提示:n個整數的數列中,若出現次數大於n/2的值,稱為「過半數」。 輸入說明 一個正整數n(1 < n ≤ 15)及n個整數 輸出說明 判斷是否有過半數 範例輸入1 5 2 1 3 2 2 範例輸出1 2 範例輸入2 4 5 5 6 6 範例輸出2 error #include <stdio.h> int maximun(int a[], int n, int *max); int main() { int n; scanf("%d", &n); int x[n]; for (int i=0; i<n; ++i) scanf("%d", &x[i] ); int frequency[n]; for (int i=0; i<n; ++i){ frequency[i]=1; for (int j=i+1; j<n; ++j) { if (x[j]==x[i]) ++frequency[i]; } } int max=0; int k = maximun(frequency, n, &max); if (max>n/2) printf("%d", x[k]); else printf("%s", "error"); } int maximun(int *a, int n, int *max){ int j=0; for (int i=0; i<n; ++i){ if (*(a+i) > *max){ *max = a[i]; j=i; } } return j; } ```