# 703 找零錢 ``` 1. 請撰寫一程式,製作販賣機找零系統,讓使用者輸入一個正整數,代表需要找零的金額,請依照面額大至小輸出找零結果,不同面額請用半形空格隔開。 2. 販賣機找零規則:只有50元、10元、5元及1元四種面額的硬幣,請使用最少的硬幣數目找零。 輸入說明 一個正整數 輸出說明 找零結果 範例輸入1 32 範例輸出1 3*$10 2*$1 範例輸入2 78 範例輸出2 1*$50 2*$10 1*$5 3*$1 #include <stdio.h> #include <string.h> #define N 7 int main(){ int x; scanf("%d", &x); int y[] = {x/50, (x%50)/10, (x%10)/5, x%5}; char s1[50]={'\0'}, s2[N]={'\0'}, s3[N]={'\0'}, s4[N]={'\0'}; if (y[0]) sprintf(s1, "%d*$50 ", y[0]); if (y[1]) sprintf(s2, "%d*$10 ", y[1]); if (y[2]) sprintf(s3, "%d*$5 ", y[2]); if (y[3]) sprintf(s4, "%d*$1 ", y[3]); strcat(s1,s2); strcat(s1,s3); strcat(s1,s4); s1[strlen(s1)-1]='\0'; printf("%s", s1); } ``` # 705 庫存函數 ``` 請撰寫一程式,讓使用者先輸入三組字串及其相對應的庫存量做為比對標準,接著再輸入五個字串,若這五個字串與任一比對標準相同,則加上庫存量,最後輸出庫存量總合。 提示1:字串長度皆不超過20字元且庫存量皆為整數。 提示2:大小寫視為不同的字串。 輸入說明 三組字串及其相對應的庫存量、五個字串 輸出說明 庫存量總和 範例輸入 Apple 100 Asus 90 Acer 80 Msi Apple Lenovo Asus Dell 範例輸出 190 #include <stdio.h> #include <string.h> #define N 3 int main(){ int num[N], sum=0; char x[N][20], y[5][20]; for (int i=0; i<N; ++i) scanf("%19s%d", x[i], &num[i]); for (int i=0; i<5; ++i){ scanf("%19s", y[i]); for (int j=0; j<N; ++j) if (!strcmp(y[i], x[j]) ) sum+=num[j]; } printf("%d", sum); } ``` # 707 動態記憶體配置 ``` 請撰寫一程式,製作矩形面積計算機,讓使用者輸入一個正整數n,代表有n個矩形,接著依序輸入n個矩形的長、寬(皆為正整數),計算各個矩形的面積並由小而大輸出。 輸入說明 一個正整數n及n個矩形的長、寬(皆為正整數) 輸出說明 由小而大的矩形面積計算結果 範例輸入1 3 8 3 9 4 5 5 範例輸出1 8x3=24 5x5=25 9x4=36 範例輸入2 5 5 5 10 5 5 20 7 3 4 6 範例輸出2 7x3=21 4x6=24 5x5=25 10x5=50 5x20=100 #include <stdio.h> void sort(int* x, int size, int* y){ int max; for (int k=0; k<size-1; ++k){ for (int i=0; i<size-1; ++i){ if (x[i]>x[i+1]){ max = x[i]; x[i] = x[i+1]; x[i+1] = max; max = y[i]; y[i] = y[i+1]; y[i+1] = max; } } } } int main(){ int n, a; scanf("%d", &n); int m[n][2], Area[n], index[n]; for (int i=0; i<n; ++i){ scanf("%d%d", &m[i][0], &m[i][1] ); Area[i] = m[i][0]*m[i][1]; index[i] = i; } sort(Area, n, index); for (int i=0; i<n; ++i){ a = index[i]; printf("%dx%d=%d\n", m[a][0], m[a][1], Area[i] ); } } //暫存(備用) void swap(int* x, int* y){ int temp = *x; *x = *y; *y =temp; } ``` # 709 圓面積計算 ``` 請撰寫一程式,讓使用者輸入一個正整數n以及n個圓心座標(x,y)和不重複的半徑,計算並輸出圓面積總和至小數點後第二位,以及最大圓的x、y座標與半徑。 提示:圓周率請使用3.14159進行運算。 輸入說明 一個正整數n以及n個圓心座標(x,y)和不重複的半徑 輸出說明 圓面積總和以及最大圓的x、y座標與半徑 範例輸入 3 0 0 4 8 5 7 7 9 6 範例輸出 Sum = 317.30 x: 8, y: 5 radius: 7 #include <stdio.h> #define PI 3.14159 void sort(int* x, int size, int* y){ int max; for (int k=0; k<size-1; ++k){ for (int i=0; i<size-1; ++i){ if (x[i]>x[i+1]){ max = x[i]; x[i] = x[i+1]; x[i+1] = max; max = y[i]; y[i] = y[i+1]; y[i+1] = max; } } } } int main(){ int n, a; scanf("%d", &n); int m[n][2], radius[n], index[n]; float sum=0; for (int i=0; i<n; ++i){ scanf("%d%d%d", &m[i][0], &m[i][1], &radius[i] ); index[i] = i; sum += PI * radius[i] * radius[i]; } sort(radius, n, index); a = index[n-1]; printf("Sum = %.2f\n", sum); printf("x: %d, y: %d\n", m[a][0], m[a][1]); printf("radius: %d", radius[n-1]); } ```