# 期中考參考解答
## 100!
```c=
#include <stdio.h>
int main() {
int k, n;
scanf("%d", &k);
for (int testCase = 0; testCase < k; testCase++) {
scanf("%d", &n);
int sum = 0;
while (n /= 5) {
sum += n;
}
if (testCase != 0) printf("\n");
printf("%d", sum);
}
return 0;
}
```
## Best destination for stargazing
```c=
#include <stdio.h>
int main() {
char c;
int row, col, testCase = 0;
int stars[101][101];
int colOffset[8] = {1, 1, 0, -1, -1, -1, 0, 1};
int rowOffset[8] = {0, -1, -1, -1, 0, 1, 1, 1};
while (scanf("%d %d\n", &row, &col) != EOF) {
testCase++;
if (row == 0 || col == 0) break;
// Initialize
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
stars[i][j] = 0;
}
}
// Read stars
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
scanf("%c", &c);
if (c == '*') {
stars[i][j] = -1;
for (int idx = 0; idx < 8; idx++) {
int locRow = i + rowOffset[idx];
int locCol = j + colOffset[idx];
if (locRow >= 0 && locRow < row && locCol >= 0 && locCol < col) {
if (stars[locRow][locCol] != -1) {
stars[locRow][locCol] += 1;
}
}
}
}
}
getchar();
}
// Print stars
if (testCase != 1) {
printf("\n");
}
printf("Field #%d:\n", testCase);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (stars[i][j] == -1) {
printf("*");
} else {
printf("%d", stars[i][j]);
}
}
printf("\n");
}
}
return 0;
}
```
## Bangla Numbers
```c=
#include <stdio.h>
#define KUTI 10000000
#define LAKH 100000
#define HAJAR 1000
#define SHATA 100
void SplitUnit(long long int n) {
if (n >= KUTI) {
SplitUnit(n / KUTI);
printf(" kuti");
n %= KUTI;
}
if (n >= LAKH) {
SplitUnit(n / LAKH);
printf(" lakh");
n %= LAKH;
}
if (n >= HAJAR) {
SplitUnit(n / HAJAR);
printf(" hajar");
n %= HAJAR;
}
if (n >= SHATA) {
SplitUnit(n / SHATA);
printf(" shata");
n %= SHATA;
}
if (n > 0) {
printf(" %d", n);
}
}
int main() {
int testCase;
long long int n;
for (testCase = 1;; testCase++) {
scanf("%lld", &n);
if (n == -1) break;
printf("%d.", testCase);
if (n == 0) {
printf(" 0");
} else {
SplitUnit(n);
}
printf("\n");
}
}
```
## Do Not Access
```c=
#include <stdio.h>
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
// 最後一行也要記得換行
char a[55][1010];
char b[1010];
int main(void) {
int T;
scanf("%d", &T);
while (T--) {
int n, m;
scanf("%d%d", &m, &n);
for (int i = 0; i < m; ++i) {
scanf("%s", a[i]);
}
int ans = 0;
for (int j = 0; j < n; j++) {
int cnta = 0, cntt = 0, cntc = 0, cntg = 0;
for (int i = 0; i < m; i++) {
if (a[i][j] == 'A')
cnta++;
else if (a[i][j] == 'T')
cntt++;
else if (a[i][j] == 'C')
cntc++;
else
cntg++;
}
int cnt_max = MAX(cnta, cntc);
cnt_max = MAX(cnt_max, cntg);
cnt_max = MAX(cnt_max, cntt);
if (cnt_max == cnta)
b[j] = 'A';
else if (cnt_max == cntc)
b[j] = 'C';
else if (cnt_max == cntg)
b[j] = 'G';
else
b[j] = 'T';
ans += (m - cnt_max);
}
for (int i = 0; i < n; ++i) printf("%c", b[i]);
printf("\n%d\n", ans);
}
return 0;
}
```
## Chihuahua Loves to Eat
```c=
#include <stdio.h>
#define SIZE 10101
int record[SIZE];
int step(int n) {
if (n > 10000) {
if (n % 2 == 1) {
return 1 + step(3 * n + 1);
} else {
return 1 + step(n / 2);
}
}
int index = 100 + n;
if (record[index] != -1) {
return record[index];
}
if (n < 0) {
record[index] = 1 + step(n * n);
} else if (n == 1) {
record[index] = 1;
} else if (n % 2 == 1) {
record[index] = 1 + step(3 * n + 1);
} else {
record[index] = 1 + step(n / 2);
}
return record[index];
}
int main() {
int lower, upper, maxIndex, maxValue;
for (int i = 0; i < SIZE; i++) {
record[i] = -1;
}
record[100] = 0;
while (scanf("%d %d", &lower, &upper) != EOF) {
maxIndex = lower;
maxValue = -1;
for (int i = lower; i <= upper; i++) {
int val = step(i);
if (val > maxValue) {
maxIndex = i;
maxValue = val;
}
}
printf("Room_%d %d\n", maxIndex, maxValue);
}
return 0;
}
```
## Teach Otto a Lesson
```c=
#include <stdio.h>
// even 0 2 4 6 8
// prime 2 3 5 7
long long p = 1234567890;
// Calculate (x^k)%Mod
long long power(long long x, long long k, long long Mod) {
x %= Mod;
if (k == 0) {
return 1;
}
if (k % 2 == 0) {
return power((x * x) % Mod, k / 2, Mod) % Mod;
}
return (x * power((x * x) % Mod, (k - 1) / 2, Mod)) % Mod;
}
long long goodNums(long long length) {
long long primeDigitNum = length / 2;
long long evenDigitNum = length - primeDigitNum;
long long powOf2 = length - 2 * primeDigitNum;
long long powOf5 = length - evenDigitNum;
return (power(2, powOf2, p) * power(5, powOf5, p)) % p;
}
int main() {
long long length;
while (scanf("%lld", &length) != EOF) {
if (length == 0) {
printf("0\n");
} else {
printf("%lld\n", goodNums(length));
}
}
}
```