# 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;
}
```