2015-11-26 73 views
0

我試圖解決the Chocolate Feast challenge on HackerRank巧克力盛宴計劃

小鮑勃喜歡巧克力,而且他去在他的口袋裏$ N商店。每塊巧克力的價格是$ C。這家商店提供了一個折扣:對於他給商店的每一個M包裝,他都可以免費獲得一塊巧克力。鮑勃有多少巧克力可以吃?

輸入格式: 第一行包含的測試用例的數量,T. Ť線跟隨,每一個都包含三個整數,N,C,和M

輸出格式: 打印的總巧克力的數量Bob吃。

限制條件:

1≤T≤1000 
2≤N≤105 
1≤C≤N 
2≤M≤N 

樣品輸入:

3 
10 2 5 
12 4 4 
6 2 2 

樣本輸出:

6 
3 
5 

說明 在第一種情況下,他可以以10美元的價格購買5塊巧克力,並交換5塊包裝以獲得一塊巧克力。因此,巧克力總數爲6.

在第二種情況下,他可以12美元購買3塊巧克力。然而,需要4包裝才能獲得更多的巧克力。他無法提供報價,因此巧克力的總數仍然爲3.

在第三種情況下,他可以以6美元購買3塊巧克力。現在他可以交換3個包裝中的2個,並獲得1塊額外的巧克力。現在,他可以使用他的1個未使用的包裝紙和新的巧克力的1個包裝紙來獲得一塊巧克力。所以一共是5

這是我在用C的解決方案的嘗試:

#include<stdio.h> 
int main(){ 
    int t; //total test cases 
    scanf("%d",&t); 
    for(int a0 = 0; a0 < t; a0++){ 
     int n; //money 
     int c; //cost of 1 chocolate 
     int m; //no of wrappers to buy a new chocolate 
     scanf("%d %d %d",&n,&c,&m); 
     int tc=0,nw=0,nc=0,w=0;//tc=totalChocolates nw=newWrappers nc=newChocolates w=wrappers 
     tc=n/c; 
     w=tc; 
     while(w>=m){ 
      nc=(w/m); 
      tc+=nc; 
      w-=m; 
      nw=w%m; 
      w+=nw; 
     } 
     printf("%d\n",tc);  
    } 
    return 0; 
} 

的問題是,我的節目通過一些測試案例,而它在一些人失敗了,但我不是能夠找到錯誤的位置。 此外,對於其他一些測試,所需時間高於2秒。

測試用例
Input
Excepted output

+6

有意義的變量名和一些評論將幫助其他人瞭解你想在你的代碼做什麼。 –

+1

查看scanf的退貨數據 –

+0

前往瑞士參加巧克力盛宴 –

回答

2

這裏你的邏輯是相當混亂:

while(w>=m){ 
     nc=(w/m); 
     tc+=nc; 
     w-=m; 
     nw=w%m; 
     w+=nw; 
    } 

如果改成這樣那麼它通過了所有測試案例:

while(w>=m){ 
     nc=(w/m);  // how many additional bars can we buy ? 
     tc+=nc;  // accumulate total bars purchased 
     w-=(nc*m); // deduct no of wrappers used to purchase additional bars 
     w+=nc;  // accumulate additional wrappers 
    } 
0

該程序(編輯前)輸出10代替9此輸入。

1 
5 1 2 

while循環試試這個:

  • m*nc而不是mw
  • 添加nc而不是nwtc