問題:
某書店對《哈利波特》做促銷活動,一共有5卷。假設每一卷的單獨銷售價格為8元,如果讀者一次購買不同的兩卷,就可以扣除5%的費用,三卷則更多,優惠如下:

#include<stdio.h>
int change[5] = {25,20,10,5,0};
//求數組中最大的值
//用于取出做大節約錢數
int max_index(int a[5]){
int max=0;
int i;
for(i=0;i<5;i++){
if(max < a[i])
max = a[i];
}
return max;
}
//冒泡排序
//用于轉化最小表示(1,2,2,2,2)->(2,2,2,2,1)
void bubble(int *a,int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
//遞歸函數
int func(int a[5]){
int i,j,k;
int buf[5];
int cash[5];
for(i=0;i<5;i++){
cash[i] = 0;
//buf[i] = a[i];
}
//退出條件
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[3]==a[4]&&a[4] == 0){
return 0;
}
//排序 轉化最小表示
bubble(a,5);
//5次循環
for(i=1;i<=5;i++){
if(a[5-i] >= 1){
for(k=0;k<5;k++){
buf[k] = a[k];
}
//減一
for(j=0;j<=5-i;j++)
buf[j] = buf[j]-1;
//繼續遞歸
cash[i-1] = (5-i+1)*8*change[i-1]+func(buf);
}
}
//傳回最大值
return max_index(cash);
}
int main(){
int b=0;
int a[5] = {0,0,0,0,0};
printf("本程式假設每本書售價8元,請輸入書本個數:");
scanf("%d",&b);
for(int i=0;i<b;i++)
{
a[i%5]+=1;
}
float result =0;
result = func(a);
printf("共節約 %2.2f元!\n",result/100);
}
運作截圖: