题目描述
周末啦,小明要去超市采购生活用品,于是先列出了一张购物清单,上面有需要购买的物品名称、数量,价格要到超市查看了才能知道。由于手头上资金有限,因此决定购物总费用不能超过 500 元。一旦购物所需费用超过 500 元,就不买价格最高的物品,直到总费用不超过 500 元为止。你的任务是编写程序,根据输入的购物清单,计算输出最终的购物实际花费和能够购买的物品。
已经给出的结构体定义:
typedef struct
{
char name[20]; //物品名称
double price; //物品单价
int n; //物品数量
double amount; //该物品的总价
} SHOPPING;
输入输出说明
【输入格式】 多行。第一行是一个整数 n,后面是 n 行,每行为物品名称、单价和数量,数据中间用一个空格分隔,表示物品名称的字符串不含空格,长度不超过 15 个字符,单价和数量都不超过 100。
【输出格式】 多行。第一行输出实际所花费用(单位:元,保留一位小数),接下按输入顺序输出实际购买的物品名称,每个物品占一行。
【输入样例1】
5
Paper 10 1
Clothes 70 2
Apple 7.25 3
Book 25 1
Cup 10 2
【输出样例1】
216.8
Paper
Clothes
Apple
Book
Cup
【输入样例2】
4
Shoes 100 2
Book 25.5 1
Clothes 80 5
Apple 7 3
【输出样例2】
446.5
Book
Clothes
Apple
实现代码
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[20]; //物品名称
double price; //物品单价
int n; //物品数量
double amount; //该物品的总价
} SHOPPING;
int main()
{
int n;
scanf("%d", &n);
SHOPPING shoppingList[n];
for (int i = 0; i < n; i++)
{
scanf("%s %lf %d", shoppingList[i].name, &shoppingList[i].price, &shoppingList[i].n);
shoppingList[i].amount = shoppingList[i].price * shoppingList[i].n;
}
double totalAmount = 0.0;
for (int i = 0; i < n; i++)
{
totalAmount += shoppingList[i].amount;
}
if (totalAmount <= 500.0)
{
printf("%.1lf\n", totalAmount);
for (int i = 0; i < n; i++)
{
printf("%s\n", shoppingList[i].name);
}
}
else
{
int maxIndex = 0;
for (int i = 1; i < n; i++)
{
if (shoppingList[i].price > shoppingList[maxIndex].price)
{
maxIndex = i;
}
}
while (totalAmount > 500.0 && shoppingList[maxIndex].n > 0)
{
shoppingList[maxIndex].n--;
shoppingList[maxIndex].amount -= shoppingList[maxIndex].price;
totalAmount -= shoppingList[maxIndex].price;
}
printf("%.1lf\n", totalAmount);
for (int i = 0; i < n; i++)
{
if (shoppingList[i].n > 0)
{
printf("%s\n", shoppingList[i].name);
}
}
}
return 0;
}
该程序首先读取购物清单的数量,并创建一个SHOPPING类型的数组用于存储购物清单的信息。然后,通过循环逐个读取每个物品的名称、单价和数量,并计算该物品的总价。接下来,遍历购物清单数组,计算出购物所需的总费用。如果总费用不超过500元,则直接输出总费用和购买的物品名称。否则,找到价格最高的物品,并不断减少其数量,直到总费用不超过500元为止。最后,输出实际花费用和能够购买的物品名称。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END