回 帖 发 新 帖 刷新版面

主题:请编:输入k,p。要求当K分成p个数字之和,即K=K1+K2+K3+...+KP,乘积最大

请编:输入k,p。要求当K分成p个数字之和,即K=K1+K2+K3+...+KP。使得K1*K2*K3*...*KP乘积最大。例如:4=4+0=3+1=2+2,输出2*2=6
4=3+1+0=2+1+1,输出2*1*1=2

回复列表 (共6个回复)

沙发

1. 根据比例式的特点,差越小,积越大.
2. 把k平均分p份就可以了,余数分摊,得积肯定是最大的.

input k,p
v=k\p
w=k mod p
s=1
r$=""
for i=1 to p
    if w>0 then
       s=s*(v+1)
       w=w-1
       r$=r$+str$(v+1)+"*"
    else
       s=s*v
       r$=r$+str$(v)+"*"
    endif
next
mid$(r$,len(r$),1)="="
r$=r$+str$(s)
print r$

板凳

CLS
DIM c AS DOUBLE
INPUT k, p
DIM a(p)
s = 0
DO UNTIL s * p > k: s = s + 1: LOOP
s = s - 1
FOR i = 1 TO p: a(i) = s: k = k - s: NEXT i
i = 0: c = 1
IF k = 0 THEN 1
DO
  i = i + 1
  IF i > p THEN i = 1
  a(i) = a(i) + 1
  k = k - 1
LOOP UNTIL k = 0
1 FOR i = 1 TO p - 1: PRINT a(i); "*"; : c = c * a(i): NEXT i
PRINT a(p); "="; c * a(p): END

3 楼


非常感谢两位的热心帮助

4 楼


非常感谢MOZ指出了编程的核心要点,向你学习!

5 楼

cls
input k,p
s=k\p:w=k mod p
for i=1 to p
if w=0 then exit for
a(i)=a(i)+1:w=w-1
next i
?a(1)+s;
for i=2 to p:?"*";a(i)+s;:next i

6 楼

CLS
INPUT k, p
DIM a(p)
s = k: x = p: a = 1
DO WHILE s > 0
10 IF s < x THEN a = a + 1: x = x - 1: GOTO 10
FOR i = a TO p
a(i) = a(i) + 1
s = s - 1: x = x - 1
IF s < 1 THEN EXIT FOR
NEXT i
LOOP
print a(1);
z=1:z=z*a(1)
FOR i = 2 TO p
PRINT "*";a(i);
z=z*a(i)
NEXT i
print "=";z

我做的怎么样

我来回复

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