鱼C论坛

 找回密码
 立即注册
查看: 2337|回复: 7

商品购买问题

[复制链接]
发表于 2021-10-30 14:25:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有如下需求,请教大神如何实现?

    双11众多商品进行打折销售,小明想购买一些自己心意的商品
    但由于受购买资金限制,所以他决定从众多心意商品中购买3件
    而且想尽可能的花完资金
    现在请你设计一个程序帮助小明计算尽可能花费的最大资金额

    输入描述
     第一行为整型数组M 数组长度小于100 数组元素记录单个商品的价格
     单个商品价格<1000
     第二行输入为购买资金的额度R
     R<100000

    输出描述
     输出为满足上述条件的最大花费额度
     如果不存在满足上述条件的商品请返回-1

    例子1
    输入
     23,26,36,27
     78
    输出
     76

    例子2
        输入
         23,30,40
         26
        输出
          -1

    备注:输入格式正确
     */
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-30 14:30:14 | 显示全部楼层

回帖奖励 +6 鱼币

好像不会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 14:59:11 | 显示全部楼层

回帖奖励 +6 鱼币

本帖最后由 傻眼貓咪 于 2021-10-30 15:32 编辑

C代码:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int price[100], money = 0, temp, max = -1;
  5.     for(int i = 0;; i++){
  6.         if(scanf("%d", &temp)){
  7.             char a = getchar();
  8.             price[i] = temp;
  9.             if(a != ',') break;
  10.         }
  11.     }
  12.     scanf("%d", &money);
  13.     for(int i = 0; price[i]; i++){
  14.         for(int j = 0; price[j]; j++){
  15.             for(int k = 0; price[k]; k++){
  16.                 if(i != j && j != k && k != i && price[i] + price[j] + price[k] < money){
  17.                     max = price[i] + price[j] + price[k] > max ? price[i] + price[j] + price[k] : max;
  18.                 }
  19.             }
  20.         }
  21.     }
  22.    
  23.     printf("%d", max);

  24.     return 0;
  25. }
复制代码
Python代码:
  1. price = list(map(int, input().split(","))) + [0]
  2. money = int(input())
  3. max = -1

  4. for i in range(len(price)):
  5.     for j in range(len(price)):
  6.         for k in range(len(price)):
  7.             if i != j != k != i and price[i] + price[j] + price[k] < money:
  8.                 max = price[i] + price[j] + price[k] if price[i] + price[j] + price[k] > max else max

  9. print(max)
复制代码
输入/输出:
  1. 23,26,36,27
  2. 78
  3. 76
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-10-30 14:59:49 From FishC Mobile | 显示全部楼层

回帖奖励 +6 鱼币

这个学习下先。谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 16:19:33 | 显示全部楼层

回帖奖励 +6 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-30 17:08:33 | 显示全部楼层

回帖奖励 +6 鱼币

本帖最后由 Stubborn 于 2021-10-30 17:44 编辑

使用暴力解决,如题示,一定要三个商品,使用排列从M选3个数字组合


  1. def max_pice(M, R, m=-1):
  2.     for each in list(itertools.combinations(M, 3)):
  3.         if sum(each) < R:
  4.            m = max(m, sum(each))
  5.     return m


复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 17:26:14 | 显示全部楼层

回帖奖励 +6 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-30 17:33:44 From FishC Mobile | 显示全部楼层
有个模块叫itertools正适合你现在用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-16 09:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表