unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}uses
  Math;procedure TForm1.FormCreate(Sender: TObject);
type
  TStuff = record //材料类型
    rBody: Integer; //盒身数
    rTop: Integer; //盒盖数
    rName: string; //材料名称
  end;
const
  BoxCount = 1950; //盒子数(盒身和盒盖)
  Stuff1: TStuff = (rBody: 15; rTop: 7; rName: '甲材料'); //甲材料可以做15个盒身和7个盒盖
  Stuff2: TStuff = (rBody: 12; rTop: 16; rName: '乙材料'); //乙材料可以做12个盒身和16个盒盖
var
  I, J: Integer;
  FirstStuff: TStuff; //首选材料
  SecondStuff: TStuff; //次选材料
  FirstCount: Integer; //首选材料数
  SecondCount: Integer; //次选材料数
begin
  FirstCount := 0;
  SecondCount := 0;
  if Stuff1.rBody + Stuff1.rTop < Stuff2.rBody + Stuff2.rTop then begin
    FirstStuff := Stuff2;
    SecondStuff := Stuff1;
  end else begin
    FirstStuff := Stuff1;
    SecondStuff := Stuff2;
  end;
  for I := BoxCount div Max(FirstStuff.rBody, FirstStuff.rTop) downto 0 do
    for J := 1 to (I * Max(FirstStuff.rBody, FirstStuff.rTop)) div
      Max(SecondStuff.rBody, SecondStuff.rTop) do
      if (I * FirstStuff.rBody + J * SecondStuff.rBody = BoxCount) and
        (I * FirstStuff.rTop + J * SecondStuff.rTop = BoxCount)  then begin
        FirstCount := I;
        SecondCount := J;
        Break;
      end;
  Memo1.Clear;
  Memo1.Lines.Add(Format('FirstStuff.rName: %s', [FirstStuff.rName]));
  Memo1.Lines.Add(Format('FirstCount: %d', [FirstCount]));
  Memo1.Lines.Add(Format('SecondStuff.rName: %s', [SecondStuff.rName]));
  Memo1.Lines.Add(Format('SecondCount: %d', [SecondCount]));
  Memo1.Lines.Add('---------------------------------------');
  Memo1.Lines.Add(Format('FirstStuff.rBody:%d*FirstCount:%d=%d',
    [FirstStuff.rBody, FirstCount, FirstStuff.rBody * FirstCount]));
  Memo1.Lines.Add(Format('SecondStuff.rBody:%d*SecondCount:%d=%d',
    [SecondStuff.rBody, SecondCount, SecondStuff.rBody * SecondCount]));
  Memo1.Lines.Add(Format('Body:%d',
    [FirstStuff.rBody * FirstCount + SecondStuff.rBody * SecondCount]));
  Memo1.Lines.Add('---------------------------------------');  Memo1.Lines.Add(Format('FirstStuff.rTop:%d*FirstCount:%d=%d',
    [FirstStuff.rTop, FirstCount, FirstStuff.rTop * FirstCount]));
  Memo1.Lines.Add(Format('SecondStuff.rTop:%d*SecondCount:%d=%d',
    [SecondStuff.rTop, SecondCount, SecondStuff.rTop * SecondCount]));
  Memo1.Lines.Add(Format('Top:%d',
    [FirstStuff.rTop * FirstCount + SecondStuff.rTop * SecondCount]));
  Memo1.Lines.Add('---------------------------------------');
end;end.

解决方案 »

  1.   

    FirstStuff.rName: 乙材料
    FirstCount: 100
    SecondStuff.rName: 甲材料
    SecondCount: 50
    ---------------------------------------
    FirstStuff.rBody:12*FirstCount:100=1200
    SecondStuff.rBody:15*SecondCount:50=750
    Body:1950
    ---------------------------------------
    FirstStuff.rTop:16*FirstCount:100=1600
    SecondStuff.rTop:7*SecondCount:50=350
    Top:1950
    ---------------------------------------
      

  2.   

    //不就效率的算法
    procedure TForm1.FormCreate(Sender: TObject);
    type
      TStuff = record //材料类型
        rBody: Integer; //盒身数
        rTop: Integer; //盒盖数
        rName: string; //材料名称
      end;
    const
      BoxCount = 1950; //盒子数(盒身和盒盖)
      Stuff1: TStuff = (rBody: 15; rTop: 7; rName: '甲材料'); //甲材料可以做15个盒身和7个盒盖
      Stuff2: TStuff = (rBody: 12; rTop: 16; rName: '乙材料'); //乙材料可以做12个盒身和16个盒盖
    var
      I, J: Integer;
      Count1: Integer;
      Count2: Integer;
    begin
      Count1 := 0;
      Count2 := 0;
      for I := BoxCount downto 0 do
        for J := 1 to BoxCount do
          if (I * Stuff1.rBody + J * Stuff2.rBody = BoxCount) and
            (I * Stuff1.rTop + J * Stuff2.rTop = BoxCount) and
            (Count1 + Count2 < I + J) then begin
            Count1 := I;
            Count2 := J;
          end;
      Memo1.Clear;
      Memo1.Lines.Add(Format('Stuff1.rName: %s', [Stuff1.rName]));
      Memo1.Lines.Add(Format('Count1: %d', [Count1]));
      Memo1.Lines.Add(Format('Stuff2.rName: %s', [Stuff2.rName]));
      Memo1.Lines.Add(Format('Count2: %d', [Count2]));
      Memo1.Lines.Add('---------------------------------------');
      Memo1.Lines.Add(Format('Stuff1.rBody:%d*Count1:%d=%d',
        [Stuff1.rBody, Count1, Stuff1.rBody * Count1]));
      Memo1.Lines.Add(Format('Stuff2.rBody:%d*Count2:%d=%d',
        [Stuff2.rBody, Count2, Stuff2.rBody * Count2]));
      Memo1.Lines.Add(Format('Body:%d',
        [Stuff1.rBody * Count1 + Stuff2.rBody * Count2]));
      Memo1.Lines.Add('---------------------------------------');  Memo1.Lines.Add(Format('Stuff1.rTop:%d*Count1:%d=%d',
        [Stuff1.rTop, Count1, Stuff1.rTop * Count1]));
      Memo1.Lines.Add(Format('Stuff2.rTop:%d*Count2:%d=%d',
        [Stuff2.rTop, Count2, Stuff2.rTop * Count2]));
      Memo1.Lines.Add(Format('Top:%d',
        [Stuff1.rTop * Count1 + Stuff2.rTop * Count2]));
      Memo1.Lines.Add('---------------------------------------');
    end;
      

  3.   

    非常感谢你的参与,虽然我已经解决了问题,但还是给你分数
    my email: [email protected]