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