问题:
某书店对《哈利波特》做促销活动,一共有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);
}
运行截图: