2017-07-17 54 views
0

廚師的計算器有兩個屏幕和兩個按鈕。最初,每個屏幕顯示數字零。按下第一個按鈕會將第一個屏幕上的數字增加1,並且每次點擊第一個按鈕將消耗1個單位的能量。無法在代碼7月挑戰中的邏輯中找到錯誤

按下第二個按鈕將增加第二個屏幕上的數字,當前出現在第一個屏幕上。每次點擊第二個按鈕消耗B單位的能量。

最初計算器有N個能量單位。

現在,廚師想知道最大可能的數字是多少,他在有限的能量下進入計算器的第二個屏幕。 這裏是鏈接:https://www.codechef.com/JULY17/problems/CALC/

比賽結束了,所以我沒有試圖欺騙。 這裏是我的問題的解決方案:

#include<bits/stdc++.h> 

using namespace std; 

int main() 
{ 
    int t; 
    cin>>t; 
    while(t--) 
    { 
     int n,b; 
     cin>>n>>b; 
     int count = 1; 
     int ans = n-b; 
     while((n - count*b)>=0) 
     { 
      if(count*(n - count*b)>ans) 
       ans = count*(n - count*b); 
      count++; 
     } 
     cout<<ans<<endl; 

    } 
    return 0; 
} 

我都試過,我能想到的...誰能幫助找到我的邏輯錯誤每個測試用例。

+2

請仔細閱讀爲什麼你應該避免兩種['位/ STDC++。h'(https://stackoverflow.com/questions/31816095/why -hould-i-not-include-bits-stdc-h)和['using namesapce std;'](https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad -實踐)。最重要的是,避免一起使用它們。 – StoryTeller

+1

首先請閱讀[爲什麼我不應該#include ?](https:// stackoverflow。com/questions/31816095/why-should-i-not-include-bits-stdc-h)然後[閱讀關於如何提出好問題](http://stackoverflow.com/help/how-to-ask),還有Eric Lippert的[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –

+2

更重要的是,我錯過了該問題的錯誤描述。 – MSalters

回答

2

,我認爲這些錯誤可能是:

1:您沒有處理ň< = B的情況下

if (n<=b) { 
    ans = 0; 
} 

2:你沒有處理子程序2個約束

long long int ans = n-b; 

3:如果b三次小於等於n,最後回答將是nb

if (n<=3*b) { 
    ans = n-b; 
} 

4:尋找一個直接的方法

k1 = ((n-(b+1))/(2*b))+1; 
i2 = (double((n-(3*b)))/(2*b)); 
i1 = ceil(i2); 
i = n-((3*b)+((i1-1)*(2*b))); 
ans = ((2*b)*((k1*(k1-1))/2))+(k1*i); 
cout << ans; 

希望這有助於:)

+0

我沒有得到你的第三點...爲什麼我需要處理n> = 3 * b? –

+0

@UkkarshVaish這是我發現通過幹運行的問題,你可能不需要處理這種情況,如果你有堅實的邏輯 –

+0

我的解決方案自動處理該問題... –

0

這是一個主要的數學問題: 隨着

  • N單位能源
  • B第二屏能源成本

  • p數量時第一按鈕的點擊

  • s時間第二按鈕的點擊數

你儘量讓

  • s * p

p + B * s <= N

所以

p <= N - B * s

然後

最大化:N * s - B * s²

s0 = 0 
s1 = N/B 

SMAX是(s0 + s1)/2 - >N/(2*B)

所以最大值爲

N²/2B - N²/4B -> N²/4B 

所以

std::cin >> n >> b; 
std::cout << n * n/b/4 << std::endl