回 帖 发 新 帖 刷新版面

主题:一道编程题,请大家指点

[问题描述] 

有两个正整数K与P,然后将K分成P个部分:K1,K2,……,KP,要求找出一种分法,满足:K1+ K2+……+ KP =K,并使K1* K2*……* KP为最大。

例如:  K=4,P=2

则分法有:

        4+0=4

        3+1=4

        2+2=4

其中乘积最大者为:2*2=4

 

[输入]

输入两个正整数K与P(2<=K<=30,P<K)输入不必查错

 

[输出]

满足条件的最大乘积的一种分法

 

[输入样例]

4,2     (也就是K=4,P=2)

 

[输出样例]

2 * 2 = 4

给个大概的思路也可以,谢谢了

回复列表 (共2个回复)

沙发

input "K,P:",K,P
S=1
V=K\P
print
for i=2 to P
    S=S*V
    K=K-V
    print V;"*";
next
print K;"=";S*K

板凳

要想使乘积最大,必须这p个数最接近,最好相等.
(1)、找出p个相等的数,它们越大越好,但乘积不能超过k。
(2)、用k减去它们的乘积。
(3)、如果k为0,就转(5),否则转(4)。
(4)、给第1个数、第2个数、……第p个数加上1,k=k-1,转(3)。
(5)、输出。
程序:
CLS
INPUT k, p: DIM a(p)
DO
  i = i + 1
LOOP UNTIL i * p > k
FOR j = 1 TO p: a(j) = i - 1: k = k - a(j): NEXT j
j = 0
1 IF k = 0 THEN 2
j = j + 1
IF j > p THEN j = 1
a(j) = a(j) + 1
k = k - 1
GOTO 1
2 s = 1
FOR i = 1 TO p - 1
    PRINT a(i); "*";
    s = s * a(i)
NEXT i
PRINT a(p); "="; s * a(p)
END

我来回复

您尚未登录,请登录后再回复。点此登录或注册