当前位置: 首页 > 知识库问答 >
问题:

电子商店

蓝昊然
2023-03-14

我一直在研究这个问题,在提交我的代码后,7个案例通过了,然而,9个案例失败了。问题链接位于HackerRank:电子商店

问题陈述

一个女孩想买一个键盘和一个USB驱动器,她想尽可能多地花钱,但要在预算内(将这两个项目结合起来)。如果这两件物品的价格都超过了她的预算,那么退货-1,否则她就买不到了。强制性的是,她想买这两件东西,而不是一件。

例子

一系列键盘以数组[40,50,60]的形式给出,USB驱动器以[5,8,12]60。现在,如果我们将这两件事相加,我们得到两个组合的最大值:

  • 40 12=52
  • 50 8=58

由于58 1更大,因此她将获得价值50和8的物品。

输入格式

    < li >第一行包含三个空格分隔的整数b、n和m、她的预算、键盘型号的数量和USB驱动器型号的数量。 < li >第二行包含以空格分隔的整数,即每个键盘型号的价格。 < li >第三行包含空格分隔的整数,即USB驱动器的价格。

输出格式

打印一个整数,表示莫妮卡将花费的金额。如果她没有足够的钱买一个键盘和一个 USB 驱动器,请改为打印 -1。

我的算法

1. Take answer variable as 0, and max value initialize it with first element of keyboard + first element of usb drives

2. loop through keyboard, make an inner loop for usb

3. Compare keyboard[i] + drives[j], if greater than b, then return -1.

4. Else find the max value and assign it to answer

5. return answer

我的逻辑和需求一样简单,但对于数组中有大量元素的情况,不知何故失败了。

密码

static int getMoneySpent(int[] keyboards, int[] drives, int b) {
    int answer = 0, maxAmount = keyboards[0] + drives[0];

    //This will compare the value of i+j throughout the loop and returns the max one 
    for(int i: keyboards){
      for(int j: drives){
        // Ofcourse if all i+j values will be greater than the max budget then -1
        if((i+j) > b)
          answer = -1;
        else if((i+j) == b){
           answer = i+j;
        }else{
           /*If the value is smaller than the max budget, the finding the max value we get after adding them and comparing with the maxAmount variable */
          if((i+j) > maxAmount){
            maxAmount = i+j;
            answer = maxAmount;
        } 
      }
    }
  }

  return answer;
}

我有两个失败的案例,它们是:

失败的测试案例1

<code>输入=

539855 818 628
380710 674456 878173 532602 868253 721585 806107 141310 790209 212031 
304748 818920 80938 322601 403071 22899 173564 153826 695108 223665 
346178 957539 975830 573171 641117 932941 822666 575293 132555 479463 
862209 313799 922966 606508 487172 139230 606390 898464 764983 829520 
174879 317603 502680 953013 398753 825387 146407 666457 367618 121790 
68188 478342 25818 506222 135197 232604 963333 79984 549654 776899 
966040 122063 432596 594425 311887 936661 506256 876303 439611 277816 
105689 851641 640971 333 216087 17692 619728 602689 650348 364881 
152060 386548 61364 564569 780938 191826 459905 211804 58177 484711 
995091 754424 57794 619638 695192 297423 983901 430435 239234 170704 
142282 74647 121413 782873 303344 265448 101069 177807 692318 691774 
62306 618191 509537 633333 996922 228947 814154 232698 615359 220853 
306323 173792 624037 655872 527161 848207 426180 724481 130740 792273 
886804 404890 449886 654224 194667 354317 367843 525624 414224 481744 
827725 176927 733780 387166 769479 964040 1{-truncated-}

预期输出

539854

对于完整的输入数据,这里是链接:输入数组数据完整

失败的测试用例 2

<code>输入=

374625 797 951
183477 732159 779867 598794 596985 156054 445934 156030 99998 58097 
459353 866372 333784 601251 142899 708233 651036 20590 56425 970129 
722162 832631 938765 212387 779 181866 992436 183446 617621 304311 
611791 524875 7068 432043 23068 291295 524893 611991 399952 139526 
46677 292211 973975 366445 232824 456173 90627 785353 618526 199719 
382549 514351 983453 592549 466869 46461 860135 607682 680461 170563 
450601 65067 13268 949100 942415 965850 563416 808580 385504 304683 
15970 97695 230946 684388 241080 440252 683418 122066 610135 495289 
833383 34397 173404 909526 391149 258839 182278 662672 755532 311782 
425252 520186 207989 546834 567829 184897 31321 969804 842475 775308 
449856 939711 395240 895029 926868 598035 727436 922082 326615 88513 
570573 196028 520952 45238 961389 325404 844725 388765 747489 271411 
539814 828925 586884 356834 965473 280998 607171 542819 276062 140956 
296341 802378 165305 74568 15640 987110 423497 772419 394971 198761 
293555 5524 14083 815646 198888 707017 711503 729172{-truncated-}

预期输出

374625

要获得此测试的完整输入数组数据,请单击以下链接:失败的测试用例2完整输入

我几乎在那里,但不知何故,我很困惑为什么我的代码不适用于长输入数组元素。任何帮助都将不胜感激,因为它将使我在未来的努力中学习新事物。

共有3个答案

郗阳德
2023-03-14

Javascript解决方案:

function getMoneySpent(keyboards, drives, b) {
    const combos = [];
    let maxCost = 0
    keyboards.forEach(keyboard => {
        drives.forEach(drive => {
            let currentComboCost = keyboard+drive;
            maxCost = ((currentComboCost <= b) && (currentComboCost > maxCost)) ? currentComboCost : maxCost;
        })
    })
    return maxCost || -1;
}
叶嘉颖
2023-03-14
int getMoneySpent(int keyboards_count, int* keyboards, int drives_count, int* drives, int b) {

     int price=-1;

         for(int i=0;i<drives_count;i++)
         {
             for(int j=0;j<keyboards_count;j++)
             {
                 if((drives[i]+keyboards[j]>price) && (drives[i]+keyboards[j]<=b))
                 {
                     price=drives[i]+keyboards[j];
                 }
             }
         }
         return price;
}
越涵衍
2023-03-14

你误解了这个问题。如果你买不到任何键盘usb,答案应该是-1。如果有一套负担不起,但如果它们都负担不起。以您当前的代码,如果最后一套负担不起,它会返回什么?

这里有一个应该可以工作的代码。和注释来解释:

int answer = -1; // that's the default answer.
int maxAmount = 0; // what if first keyboard + first usb are unaffordable? let's put it to 0

//This will compare the value of i+j throughout the loop and returns the max one 
for(int i: keyboards){
  for(int j: drives){
    if((i+j) > b) {
      // do nothing, it's unaffordable (and remove this block)
    }else if((i+j) == b){
       answer = i+j; 
       return answer;// it can't be more, stop the loop and return the solution
    } else if((i+j) > maxAmount){ // no need to put an else, then an if both conditions are related
        maxAmount = i+j;
        answer = maxAmount;
    } 
  }
}

当然,如果从上面的代码中删除第一个空的<code>if</code>块,则必须更改最后一个条件,以检查它是否低于允许的最大值:

if((i+j)>maxAmount && (i+j)<=b)
 类似资料:
  • 所以我决定为我的Woocommerce商店提供两个不同的模板。 我发现了一个很好的小片段,它基本上告诉我编辑taxonomy-product_cat。php 我的所有店铺页面都是分类/归档页面。我父母的分类中,每只有50只猫。 因此,我的代码在taxonomy-product_cat中如下所示。php: 问题是archive-product.php只适用于“户外家具”类别,而不是其子类别。 我知道

  • 主要内容:最受欢迎的支付网关提供商支付网关是一种在线支付处理技术,帮助企业接受信用卡和电子支票。 换句话说,支付网关是位于电子商务平台和客户之间的“中间人”(Manin-the-middle)。 支付网关允许 - 快速轻松地付款。 保持客户的数据(信息)和金钱的安全。 获得客户的信任,所以他们愿意交出钱。 要选择正确的支付网关,应遵循以下准则 - 应该确定您所在国家支持的支付网关,而不是全部在全球运营。 应该检查您的电子商务平台支

  • 我期待有人在以下方面帮助我。下面是场景 我们计划跟踪收入、销售的产品等,并在我的测试域上使用GTM设置了标准的电子商务跟踪。如果电子商务跟踪在测试域上运行良好,那么我们计划将其移动到live。 我已经准备好了 在此处输入图像描述 标签我已经设置好了 在此处输入图像描述 打开标签后,立即将数据层代码放置在GTM容器上方的确认页面上 问题就在这里 1)每当有人在实时目标转换中登陆确认页面时,访问者在该

  • 乐易拍信息平台主要为企业实现电子商务提供一个快捷的解决方案.通过本方案系统,可以加快开发速度,降低开发成本.搭建高效、稳定、可拓展的系统。 本系统运用asp.net 2.0开发,数据库使用SQL2000(可以放在SQL2005上),包括前台和后台两个部分。 前台主要运用jquery+CSS 构建的展示订购平台。 后台是运用CSS+EXTJS构建的一个完整的权限管理+销售订单管理的系统。主要功能:

  • 主要内容:Magento,Shopify,Woocommerce,Bigcommerce在本章中,我们将讨论电子商务。 哪些是最受欢迎和最安全的电子商务平台? 需要什么来保护他们? 电子商务是通过互联网销售和购买商品和服务,并通过这种媒介进行支付。 这个交易发生在客户到企业,B2B,客户端到客户之间。 所有这一切,都有钱交易,在使用或者建立电子商务网站时要慎重。 下面列出了一些安全的顶级电子商务平台,并详细说明了这些平台。 Magento 网站链接是 - http://magento

  • 数码宝贝电子商务平台是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。 换句话说,就是一种购买日常用品,书籍,服饰,鞋帽,玩具,软件,唱片,家电,等并且送货上门的购物平台。