C语言实现购物车清单功能代码

题目描述

周末啦,小明要去超市采购生活用品,于是先列出了一张购物清单,上面有需要购买的物品名称、数量,价格要到超市查看了才能知道。由于手头上资金有限,因此决定购物总费用不能超过 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
喜欢就支持一下吧
点赞12赞赏 分享