2014-03-06 34 views
0

我需要我提出的粗略解決方案背後的邏輯/想法。給出「N」發現p和q使得p + q = N和p * q是最大的

的問題是:

鑑於N,其中1<=N<=1000000
現在我需要找到兩個數p和q,使得p + q = N && p * q = maximum.

我選擇使用此(((N+1)/2)*((N/2)));基本上給了我最大的產品,最小的總和。但我對這種邏輯的證明感興趣。

任何幫助或建議?

#include<stdio.h> 

typedef unsigned long uint; 
unsigned long calc(uint); 

int main(void) { 
    short i = 0; 
    uint k = 0; 
    scanf("%i", &i); 
    while(i--) { 
     scanf("%lu", &k); 
     printf("%lu\n", calc(k)); 
    } 
    return 0; 
} 

uint calc(uint k){ 
    return (((k+1)/2)*((k/2))); 
} 
+1

這不是一個數學問題,不是一個編程問題? –

+3

這個問題似乎是脫離主題,因爲它是一個數學問題,而不是編程問題。 – hivert

+0

雖然問題可能包含代碼,但問題的本質似乎是無關緊要的,因爲它涉及[math.se]。 – Dukeling

回答

3

f(p) = p * (N - p) = p * N - p^2 

然後:

f'(p) = N - 2 * p 
f''(p) = - 2 

由於f''(p) < 0,只是解決了f'(p) = 0給了我們一個地方最大值

When f'(p) = 0, 
p = N/2 
=> q = N/2 

您還需要測試端點f(0)f(N),但是這兩種評估爲零,所以我們的最大值是全球最大。

注意:這基本上是說,在一定周長的所有矩形中,正方形具有最大的面積。

相關問題