如何测试解决“鲜花”采访街道挑战的算法

时间:2012-12-14 20:19:00

标签: c++ algorithm

我正在InterviewStreet解决挑战“鲜花”:

  

你和你的K-1朋友想买N朵花。花号我有   主持人ci。不幸的是卖家不喜欢顾客买   很多花,所以他试图改变花的价格   以前买过鲜花的顾客。更确切地说,如果是客户   已经买了x花,他应该支付(x + 1)* ci美元购买   花号i。

     

你和你的K-1朋友想以这样的方式购买所有的N花   你花的钱尽可能少。

但我的解决方案是测试用例失败:3,5和7 所以我得到了7/10的分数。

我已经彻底测试了我的代码,并且它一直给我正确的答案,所以我不明白为什么我没有得到这个挑战的满分。

基本上我所做的是,如果有比花更多或相同的朋友购买,我将返回花的价格总和。

如果有更多的鲜花比朋友买,那么我会按照后代的顺序对花的价格进行分类(更便宜更便宜),并让朋友一次购买一个。

typedef unsigned long long int uint64;
uiRemainder = n % k;

    sort(viFlowersCost.begin(), viFlowersCost.end(), greater<int>()); //Sorted Array Descending

    if(uiRemainder == 0) {
            for(a = 0; a < n; a+=k) {
                    for(b = 0; b < k; ++b) {
                            ui64Result += (x+1)*viFlowersCost[a+b];
                    }
            ++x;
            }
    } else {
            for(a = 0; a < (n/k)*k; a+=k) {
                    for(b = 0; b < k; ++b) {
                            ui64Result += (x+1)*viFlowersCost[a+b];
                    }   
                    ++x;
            }   
            for(b = 0; b <= uiRemainder; ++b) {
                    ui64Result += (x+1)*viFlowersCost[a+b];
            }   
    }   

    cout<<ui64Result;

我的问题是:考虑到以下限制,哪些输入会使我的程序抛出错误的答案:

约束:

  

1 <= N,K <= 100

     

每朵花的成本不超过1,000,000

我已经针对极端情况进行了测试:

N = 99 K = 100,随后是100朵花,价格在900,000-1,000,000之间 它仍然给了我正确的答案。

例如以下测试用例:

  

99 100

     

916807 972425 933847 933809 997490 906570 926534 936300 963336 917637   956205 927011 966648 942300 906839 911128 967915 931564 970607 941177   935338 918421 905061 977177 911389 959618 991125 966236 942883 980278   979549 991459 907876 928248 908003 970585 967394 962906 915297 950976   906662 989573 985875 903158 911494 990185 911664 975093 934338 976986   918541 910894 911602 952041 907953 967915 977677 982920 990006 959603   908295 943832 917462 911173 976614 996246 935262 945460 987876 973350   949546 930732 922685 988390 912489 979841 918856 953461 923072 985130   906338 917402 975289 931717 927872 920676 914295 994827 997989 975217   977181 914545 991968 935860 994059 913399 927867 912266 948655 944224

我的节目输出:

  

93697342

根据采访街道,这是正确的答案

0 个答案:

没有答案