求助:购买商品
有 3 种商品在 N 个商店出售,同样商品在不同商店的售价各不相同,假定商店名称用数字1、2、3、4、......来表示,商品的名称用A、B、C来表示。如果按照最先购买商品A、再购买商品B、最后购买商品C的顺序购买商品,且在一个商店只能购买一种商品。请编程设计一个购物方案,用最少的钱购得 3 种商品。
这是题目。
#include <stdio.h>
typedef struct buy
{ char gname;
int sname;
int gprice;
} BUY;
int main( )
{ int i, j, n;
int min, price[10][3];
int findm( int n, int price[][3], BUY scheme[] );
static BUY scheme[3]={ {'A', 0, 0}, {'B', 0, 0}, {'C', 0, 0} };
scanf( "%d", &n );
for( i = 0; i < n; i++ )
for( j = 0; j < 3; j++ )
scanf( "%d", &price[i][j] );
min = findm( n, price, scheme );
printf("Total Money are : %d\nGoods-Name Shop-Name Goods-Price\n", min );
for ( i=0; i < 3; i++ )
printf(" %c:%10d%13d\n", scheme[i].gname, scheme[i].sname, scheme[i].gprice );
return 0;
}
这是前置代码,设定好的。
这是我的程序。
findm( int n, int price[][3], BUY scheme[] )
{ int i,j,k,m,a[3]={-1,-1,-1},min=0,x;
for (k=0;k<3;k++)
{ for (i=0,j=1;j<n;j++)
{
if (price[i][k]>price[j][k]) /* 比较每列的大小,求出最小的列*/
i=j;
if (i!=j)
{ if ((price[i][k]==price[j][k])&&(k<2)) /* 若第一列相同,就比较第二列,取第二列大的*/
{ if (price[i][k+1]<=price[j][k+1])
i=j;
if ((price[i][k+1]==price[j][k+1])&&(k<1)); /* 若第一,二列相同,就比较第三列,取第三列的的*/
{ if (price[i][k+2]<price[j][k+2])
i=j;
}
}
}
}
scheme[k].sname=i+1;
a[k]=i;
scheme[k].gprice=price[i][k];
}
for (m=0;m<3;m++)
min=scheme[m].gprice+min;
return (min);
}
举个例子
输入
5 输出 Total Money are : 46
12 29 9 Goods-Name Shop-Name Goods-Price
10 30 8 A: 2 10
11 35 12 B: 4 28
10 28 11 C: 5 8
12 31 8