3 个矩阵中哪一个的元素数和最大(FreePascal)?

问题描述 投票:0回答:1

我有一个输出 3 (4×4) 矩阵(不同数量,相同布局)的程序。

而且我必须再次输出矩阵,其中元素个数和最大。

例如65是最大的元素数和。

  ⎡ 1 2 3 4 ⎤  ⎡ 10 ⎤    ⎡ 1 2 3 4 ⎤  ⎡ 10 ⎤    ⎡ 1 1 1 1 ⎤  ⎡  4 ⎤
  ⎢ 5 6 7 8 ⎥  ⎢ 26 ⎥    ⎢ 2 3 4 5 ⎥  ⎢ 14 ⎥    ⎢ 2 2 2 2 ⎥  ⎢  8 ⎥
  ⎢ 9 1 2 3 ⎥  ⎢ 15 ⎥    ⎢ 3 4 5 6 ⎥  ⎢ 18 ⎥    ⎢ 3 3 3 3 ⎥  ⎢ 12 ⎥
  ⎣ 2 3 4 5 ⎦  ⎣ 14 ⎦    ⎣ 4 5 6 7 ⎦  ⎣ 22 ⎦    ⎣ 4 4 4 4 ⎦  ⎣ 16 ⎦
  
                 65                     64                     40

生成3个随机矩阵的程序:

uses
  SysUtils;

var
  i: integer;
  x: integer;
  y: integer;
  matrix: array[1..4, 1..4] of integer;

begin
  randomize;

  for i := 1 to 3 do
  begin
    for x := 1 to 4 do
      for y := 1 to 4 do
        matrix[x, y] := random(101);

    for x := 1 to 4 do
    begin
      for y := 1 to 4 do
        write(IntToStr(matrix[x, y]), ' ');
      writeln;
    end;
    writeln;
  end;
  readln;
end.

你能帮我吗?我将非常感激。

freepascal
1个回答
1
投票

例如可以这样:

program Project1;

uses
  SysUtils;

// create a type for the matrix
type
  TMatrix = array[1..4, 1..4] of Integer;

var
  I: Integer;
  X: Integer;
  Y: Integer;
  CurSum: Integer;
  MaxIdx: Integer;
  MaxSum: Integer;
  Matrices: array[1..3] of TMatrix;
begin
  // initialize random seed
  Randomize;
  // initialize max. sum matrix index and max. matrix sum
  MaxIdx := 0;
  MaxSum := 0;
  // iterate to create 3 matrices
  for I := 1 to 3 do
  begin
    // initialize sum value of this matrix to 0
    CurSum := 0;
    // iterate to fill the matrices with random values
    for X := 1 to 4 do
      for Y := 1 to 4 do
      begin
        // to the matrix I assign a random value to the X, Y position
        Matrices[I][X, Y] := Random(101);
        // add this random value to the current matrix sum value
        CurSum := CurSum + Matrices[I][X, Y];
      end;
    // check if this matrix sum value is greater than the stored one
    // and if so, then...
    if CurSum > MaxSum then
    begin
      // store this matrix index
      MaxIdx := I;
      // and store this matrix sum as a max sum value
      MaxSum := CurSum;
    end;
    // print out this matrix
    for X := 1 to 4 do
    begin
      for Y := 1 to 4 do
        Write(IntToStr(Matrices[I][X, Y]), ' ');
      WriteLn;
    end;
    WriteLn;
  end;
  // print out the index of the matrix with max sum and its sum value
  WriteLn;
  WriteLn('The biggest matrix is the ' + IntToStr(MaxIdx) + '. one. The sum ' +
    'of this matrix is ' + IntToStr(MaxSum) + '.');
  WriteLn;
  // and print out that matrix with max sum value
  for X := 1 to 4 do
  begin
    for Y := 1 to 4 do
      Write(IntToStr(Matrices[MaxIdx][X, Y]), ' ');
    WriteLn;
  end;

  ReadLn;
end.
© www.soinside.com 2019 - 2024. All rights reserved.