# Lab5 參考解答
# Adventure of Forest
> Author: TA
```c=
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
char name[1000000][31];
int compare(const void * a, const void * b){
int flag = strcmp(a, b);
if(flag > 0){
return 1;
}
else if(flag < 0){
return -1;
}
else{
return 0;
}
}
int main(){
int n;
int i, j;
scanf("%d", &n);
getchar();
getchar();
while(n--){
char temp[31] = {0};
int num = 0;
bool flag = false;
int count = 0;
for(i = 0; i < 1000000; i++){
memset(name[i], 0, 31);
}
for(i = 0; ;){
gets(name[i]);
if(name[i][0] == 0){
break;
}
else{
i++;
num++;
}
}
qsort (name, num, 31, compare);
for(i = 0; i < num;){
if(!flag){
printf("%s ", name[i]);
flag = true;
count++;
}
else{
if(i + 1 != num && strcmp(name[i], name[i + 1]) == 0){
count++;
}
else{
printf("%.4lf\n", ((double)count / (double)num) * 100);
flag = false;
count = 0;
}
i++;
}
}
if(n){
printf("\n");
}
}
printf("\n");
return 0;
}
```
# You are a hardworking bee
> Author: TA
```c=
#include<stdio.h>
int d[5001][2000] = { 0 };
int main()
{
d[1][0] = 1;
int i, j;
for (i = 2; i <= 5000; i++)/*大數運算 運算方法如下,先算出5000項,設定每項最大2000個位數*/
{
for (j = 0; j < 2000; j++)
{
d[i][j] += d[i - 1][j] + d[i - 2][j];
d[i][j + 1] += d[i][j] / 10;
d[i][j] %= 10;
}
}
int n;
while (scanf("%d", &n) != EOF)
{
printf("The Fibonacci number for %d is ", n);
for (i = 1999; i >= 0; i--) /*第n項的橫排陣列 從最後一個開始讀取*/
{
if (d[n][i] != 0)
break;
}
if (i == -1) /*當n=1時的輸出*/
printf("0");
else
for (; i >= 0; i--)
printf("%d", d[n][i]); /*倒輸出整個橫排*/
printf("\n");
}
return 0;
}
```