编写一个子程序,对于给定的正整数N和M(N〈M〉,打印出所有满足条件I1+I2+…+IN = M的正整数序列(100分)

  • 主题发起人 主题发起人 rawker
  • 开始时间 开始时间
R

rawker

Unregistered / Unconfirmed
GUEST, unregistred user!
编写一个子程序,对于给定的正整数N和M(N〈M〉,打印出所有满足条件I1+I2+…+IN = M的正整数序列
I1,I2,…IN,其中I1)I2)…IN。例如N=4,M=8时,打印结果如下: (10分)
5 1 1 1
4 2 1 1
3 3 1 1
3 2 2 1
2 2 2 2
 
我就不用递归。[:D]
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
proceduredo
It(n, m: Integer);
const
MaxN = 20;
type
TNode = record
Sum: Integer;
d: Integer
end;
var
Stack: array [0..MaxN] of TNode;
Top: Integer;
i: Integer;
begin
if n>MaxN then
Exit;
Stack[0].Sum:=0;
Top:=1;
Stack[1].Sum:=0;
Stack[1].d:=m-n+Top+1;
while Top>0do
begin
while Stack[Top].d>1do
begin
Dec(Stack[Top].d);
Stack[Top].Sum:=Stack[Top-1].Sum+Stack[Top].d;
if (Top<n) and ((Stack[Top].Sum+n-Top)<=m) then
begin
Inc(Top);
Stack[Top].d:=Stack[Top-1].d+1
end
else
if (Top=n) and (Stack[Top].Sum=m) then
begin
for i:=1 to ndo
Write(Stack.d, ' ');
WriteLn
end
end;
Dec(Top)
end
end;

begin
do
It(4, 8);
ReadLn
end.
 
后退
顶部