主题:请编:输入k,p。要求当K分成p个数字之和,即K=K1+K2+K3+...+KP,乘积最大
zgk
[专家分:50] 发布于 2007-05-07 08:23:00
请编:输入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个回复)
沙发
moz [专家分:37620] 发布于 2007-05-07 11:33:00
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$
板凳
Matodied [专家分:7560] 发布于 2007-05-07 13:29:00
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 楼
zgk [专家分:50] 发布于 2007-05-08 08:28:00
非常感谢两位的热心帮助
4 楼
zgk [专家分:50] 发布于 2007-05-08 08:30:00
非常感谢MOZ指出了编程的核心要点,向你学习!
5 楼
007bond [专家分:540] 发布于 2007-05-10 10:25:00
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 楼
美味的汽水 [专家分:70] 发布于 2007-05-10 22:15:00
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
我做的怎么样
我来回复