Mã: Chọn tất cả
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Mã: Chọn tất cả
1 2 3 4 5 = 10
6 7 8 9 10 = 7
11 12 13 14 15 = 24
16 17 18 19 20 = 36
21 22 23 24 25 = 23
|| || || || || \\
11 26 39 19 5 61
Chương trình minh họa:
Mã: Chọn tất cả
Moi ban nhap hang 1: 1 2 3 4 5
Moi ban nhap hang 2: 6 7 8 9 10
Moi ban nhap hang 3: 11 12 13 14 15
Moi ban nhap hang 4: 16 17 18 19 20
Moi ban nhap hang 5: 21 22 23 24 25
Ket qua tim duoc la: 5
Mã nguồn (Dùng mảng 1 chiều):
Mã: Chọn tất cả
Uses Crt;
Function SNT(N : LongInt) : Boolean;
Var i : LongInt;
Begin
If N < 2 Then Exit(False);
For i := 2 To N Div 2 Do
If N Mod i = 0 Then Exit(False);
Exit(True);
End;
Procedure NhapHang(Var mH : Array Of LongInt; H : LongInt);
Var i : Byte;
Begin
Write('Moi ban nhap hang ', H, ': ');
{ Khi sử dụng Array làm tham số trong chương trình con
Phần tử đầu tiên luôn bắt dầu từ 0
Ví dụ, nếu mảng đầu vào được khai báo là Array[5..8]
Thì khi vào chương trình con nó sẽ trở thành Array[1..4] }
ReadLn(mH[0], mH[1], mH[2], mH[3], mH[4]);
mH[5] := 0;
For i := 0 To 4 Do
If SNT(mH[i]) Then mH[5] := mH[5] + mH[i];
End;
Var Hang1, Hang2, Hang3, Hang4, Hang5, Hang6 : Array[1..6] Of LongInt;
i : Byte;
Min : LongInt;
Begin
ClrScr;
NhapHang(Hang1, 1);
Min := Hang1[6];
NhapHang(Hang2, 2);
If Hang2[6] < Min Then Min := Hang2[6];
NhapHang(Hang3, 3);
If Hang3[6] < Min Then Min := Hang3[6];
NhapHang(Hang4, 4);
If Hang4[6] < Min Then Min := Hang4[6];
NhapHang(Hang5, 5);
If Hang5[6] < Min Then Min := Hang5[6];
{ Tính tổng từng cột }
For i := 1 To 5 Do
Begin
Hang6[i] := 0;
If SNT(Hang1[i]) Then Hang6[i] := Hang6[i] + Hang1[i];
If SNT(Hang2[i]) Then Hang6[i] := Hang6[i] + Hang2[i];
If SNT(Hang3[i]) Then Hang6[i] := Hang6[i] + Hang3[i];
If SNT(Hang4[i]) Then Hang6[i] := Hang6[i] + Hang4[i];
If SNT(Hang5[i]) Then Hang6[i] := Hang6[i] + Hang5[i];
If Hang6[i] < Min Then Min := Hang6[i];
End;
{ Tính tổng 2 đường chéo }
Hang6[6] := 0;
If SNT(Hang1[1]) Then Hang6[6] := Hang6[6] + Hang1[1];
If SNT(Hang2[2]) Then Hang6[6] := Hang6[6] + Hang2[2];
If SNT(Hang3[3]) Then Hang6[6] := Hang6[6] + Hang3[3];
If SNT(Hang4[4]) Then Hang6[6] := Hang6[6] + Hang4[4];
If SNT(Hang5[5]) Then Hang6[6] := Hang6[6] + Hang5[5];
If SNT(Hang1[5]) Then Hang6[6] := Hang6[6] + Hang1[5];
If SNT(Hang2[4]) Then Hang6[6] := Hang6[6] + Hang2[4];
If SNT(Hang4[2]) Then Hang6[6] := Hang6[6] + Hang4[2];
If SNT(Hang5[1]) Then Hang6[6] := Hang6[6] + Hang5[1];
If Hang6[6] < Min Then Min := Hang6[6];
Write('Ket qua tim duoc la: ', Min);
ReadLn;
End.
Mã nguồn (Dùng mảng 2 chiều):
Mã: Chọn tất cả
Uses Crt;
Function SNT(N : LongInt) : Boolean;
Var i : LongInt;
Begin
If N < 2 Then Exit(False);
For i := 2 To N Div 2 Do
If N Mod i = 0 Then Exit(False);
Exit(True);
End;
Var A : Array[1..6, 1..6] Of LongInt;
i, j : Byte;
Min : LongInt;
Begin
ClrScr;
Min := -1;
For i := 1 To 5 Do
Begin
Write('Moi ban nhap hang ', i, ': ');
ReadLn(A[i, 1], A[i, 2], A[i, 3], A[i, 4], A[i, 5]);
A[i, 6] := 0;
For j := 1 To 5 Do
If SNT(A[i, j]) Then A[i, 6] := A[i, 6] + A[i, j];
If Min = -1 Then Min := A[i, 6]
Else If A[i, 6] < Min Then Min := A[i, 6];
End;
{ Tính tổng từng cột }
For i := 1 To 5 Do
Begin
A[6, i] := 0;
For j := 1 To 5 Do
If SNT(A[j, i]) Then A[6, i] := A[6, i] + A[j, i];
If A[6, i] < Min Then Min := A[6, i];
End;
{ Tính tổng 2 đường chéo }
A[6, 6] := 0;
For i := 1 To 5 Do
Begin
If SNT(A[i, i]) Then A[6, 6] := A[6, 6] + A[i, i];
If SNT(A[i, 5-i+1]) And (i <> 3) Then A[6, 6] := A[6, 6] + A[i, 5-i+1];
End;
If A[6, 6] < Min Then Min := A[6, 6];
Write('Ket qua tim duoc la: ', Min);
ReadLn;
End.