---
# System prepended metadata

title: TQC正式考試詳解

---

# TQC正式考試詳解

## Code Judger
網址：[codejudger.com](http://codejudger.com/groups/1444/tqc)
帳號：a911@stdmail.nssh.ntpc.edu.tw
密碼：19911223

## C語言架構

每一個程式都一定要打的！
```c=
#include <stdio.h> //就像是引入字典，讓電腦知道你接下來打的東西是什麼。
int main(){
    //進入主程式區，所有程式碼都打在這裡面。
}
```

## 通過標準
作答時間：100分鐘
最低通過分數：70分

※第1\~4大類每題10分，第5~7大類每題20分。
※證書不會寫分數，只會寫通過。

答題技巧：(真心建議放棄)
* 版本7：放棄 $410$、$706$。
* 版本8：放棄 $608$。

已將以下程式碼存在雲端硬碟，[點我查看](https://drive.google.com/drive/folders/12iWwM_cCywSJDpL2cETd7j53w5OeWH3p?usp=sharing)。

版本7：1, 2, 3, 8, 14, 22, 26, 28, 29, 31, 33, 34, 35, 36, 37號
版本8：4, 5, 6, 7, 16, 17, 18, 19, 21, 24, 27, 30, 32, 38號

# 版本7

## 108

輸入：整數$n$代表直徑。
輸出：直徑、半徑(第2位)、面積(第4位)。(靠左對齊、欄寬10、以3.1415計算)

```c=
#include <stdio.h>
int main(){
    int n;
    scanf("%d", &n);
    printf("%-10d\n%-10.2f\n%-10.4f", n, n/2.0, (n/2.0)*(n/2.0)*3.1415);
}
```

## 202
輸入：整數$n$代表分數。
輸出：若在0~100分以外，輸出"error"。若大於60分，加10分，否則加5分。
```c=
#include <stdio.h>
int main(){
    int n;
    scanf("%d", &n);
    if(n<0 || n>100) printf("error");
    else if(n>60) printf("%d", n+10);
    else printf("%d", n+5);
}
```

## 304
輸入：6個整數。
輸出：有幾個是3的倍數。(須撰寫一名為 $compute()$ 的函式)
```c=
#include <stdio.h>
int compute(){}
int main(){
    int i, n, ans=0;
    for(i=0; i<6; i++){
        scanf("%d", &n);
        if(n%3==0) ans++;
    }
    printf("%d\n", ans);
}
```

## 410
輸入：整數$n$，讀取 read.txt。
輸出：前$n$列，每個字首轉大寫，並寫入 write.txt。
```c=
#include <stdio.h>
int main(){
    int n, line=0, i;
    scanf("%d", &n);
    FILE *r = fopen("read.txt", "r");
    FILE *w = fopen("write.txt", "w");
    char s[100];
    while(fgets(s, 100, r)){
        for(i=1; i<strlen(s); i++){
            s[0]=toupper(s[0]);
            if(s[i-1]==' ') s[i]=toupper(s[i]);
        }
        line++;
        printf("%s", s);
        fputs(s, w);
        if(line==n) break;
    }
}
```
## 510
輸入：整數$n$、$m$，$n*m$陣列。
輸出：最外圍為1 或 1的上下左右有0，輸出"*"。
```c=
#include <stdio.h>
int main(){
    int n, m, i, j;
    scanf("%d %d", &n, &m);
    int a[n][m];
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            scanf("%d", &a[i][j]);
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(a[i][j]==1&&(i==0||j==0||i==n-1||j==m-1)) printf("*");
            else if(a[i][j]==1&&(a[i-1][j]==0||a[i][j-1]==0||a[i+1][j]==0||a[i][j+1]==0)) printf("*");
            else printf(" ");
        }
        printf("\n");
    }
}
```

## 602
輸入：字串。
輸出：大寫分離，小寫分離，大寫字數。
```c=
#include <stdio.h>
int main(){
    char s[10];
    int i, count=0;
    scanf("%s", s);
    for(i=0; i<strlen(s); i++){
        if(isupper(s[i])){
            printf("%c", s[i]);
            count++;
        }
    }
    printf("\n");
    for(i=0; i<strlen(s); i++){
        if(islower(s[i])) printf("%c", s[i]);
    }
    printf("\n%d", count);
}
```

## 706
輸入：4個整數，讀取 read.txt。
輸出：由小到大排序，寫入 write.txt。
```c=
#include <stdio.h>
int main(){
    int a[10], n=3, i, j;
    FILE *r = fopen("read.txt", "r");
    FILE *w = fopen("write.txt", "w");
    for(i=0; i<4; i++) scanf("%d", &a[i]);
    while(fscanf(r, "%d", &a[++n]) != EOF);
    
    for(i=n-1; i>=1; i--){
        for(j=0; j<i; j++){
            if(a[j] > a[j+1]){
                int tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
    
    for(i=0; i<n; i++){
        printf("%d\n", a[i]);
        fprintf(w, "%d\n", a[i]);
    }
}
```

# 版本8

## 102
輸入：整數$n$代表數量。
輸出：一瓶23.34元，要花多少錢(第2位)。
```c=
#include <stdio.h>
int main(){
    int n;
    scanf("%d", &n);
    printf("%.2f", n*23.34);
}
```

## 202
輸入：整數$n$代表分數。
輸出：若在0~100分以外，輸出"error"。若大於60分，加10分，否則加5分。
```c=
#include <stdio.h>
int main(){
    int n;
    scanf("%d", &n);
    if(n<0 || n>100) printf("error");
    else if(n>60) printf("%d", n+10);
    else printf("%d", n+5);
}
```
## 310
輸入：整數$n$。
輸出：小於$n$的阿姆斯壯數、總和。(須撰寫一名為 $compute()$ 的函式)
阿姆斯壯數的例子：$153 = 1^3 + 5^3 + 3^3$
```c=
#include <stdio.h>
int compute(){}
int main(){
    int n, i, a, b, c, sum=0;
    scanf("%d", &n);
    for(i=1; i<n; i++){
        if(i<10){
            printf("%d\n", i);
            sum += i;
            continue;
        }
        a=i/100, b=(i%100)/10, c=i%10;
        if(a*a*a + b*b*b + c*c*c == i){
            printf("%d\n", i);
            sum += i;
        }
    }
    printf("%d", sum);
}
```

## 406
輸入：字串。
輸出：依鍵盤位置輸出右邊的字母。(若非字母則保持原樣)
```c=
#include <stdio.h>
int main(){
    char s[50], a[]="qwertyuioppasdfghjkllzxcvbnmm";
    scanf("%s", s);
    int i, j;
    for(i=0; i<strlen(s); i++){
        for(j=0; j<strlen(a); j++){
            if(tolower(s[i]) == a[j]){
                if(isupper(s[i])) printf("%c", toupper(a[j+1]));
                else printf("%c", a[j+1]);
                break;
            }
        }
    }
}
```

## 504
輸入：整數$n$
輸出：判斷是否為迴文數(Yes/No)。
迴文數：12321、48784
```c=
#include <stdio.h>
int main(){
    int n, a, b=0;
    scanf("%d", &n);
    a=n;
    while(n!=0){
        b=b*10 + n%10;
        n/=10;
    }
    if(a==b) printf("Yes");
    else printf("No");
}
```

## 608
輸入：10個整數。(0:三振，1,2,3:一,二,三壘，4:全壘打)
輸出：棒球得分。
```c=
#include <stdio.h>
int main(){
    int n, score=0, i, j;
    int a[3] = {0, 0, 0};
    for(i=0; i<10; i++){
        scanf("%d", &n);
        for(int j=2; j>=0; j--){
            if(a[j]==1){
                a[j]=0;          
                if(j+n<3) a[j+n]=1;
                else score++;
            }
        }
        a[n-1]=1;
        if(n==4) score++;
    }
    printf("score = %d", score);
}
```

## 704
輸入：整數$n$，$n$個整數。
輸出：出現次數大於$n/2$的數。(若無輸出error)
```c=
#include <stdio.h>
int main(){
    int n, i, j, d, check, count=0;
    scanf("%d", &n);
    int a[n], b[n];
    memset(b, 0, sizeof(b));
    for(i=0; i<n; i++){
        scanf("%d", &d);
        check=0;
        for(j=0; j<count; j++){
            if(a[j] == d){
                b[j]++;
                check=1;
                break;
            }
        }
        if(check==0){
            a[count] = d;
            b[count]++;
            count++;	
        }
    }
    for(i=0; i<count; i++){
        if(b[i] > n/2){
            printf("%d", a[i]);
            return 0;
        }
    }
    printf("error");
}
```

