K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

Bài 3: Đỉnh đồi – TOP.* (7 điểm)

Đồn điền trà của gia đình Tý nằm trên địa hình có nhiều ngọn đồi, để bảo vệ đồn điền gia đình giao cho Tý tính toán số người cần thiết để canh gác trên các ngọn đồi này.

Vấn đề là sẽ cần bao nhiêu người canh gác nếu như anh ta muốn đặt 1 người canh gác trên đỉnh của mỗi đồi. Tý có bản đồ của đồn điền là một ma trận gồm N hàng và M cột. Mỗi phần tử của ma trận có độ cao Hij so với mặt nước biển là 0 của ô (i,j). Hãy giúp Tý xác định số lượng đỉnh đồi trên bản đồ.

Đỉnh đồi là 1 hoặc nhiều ô nằm kề nhau của ma trận có cùng độ cao được bao quanh bởi cạnh của bản đồ hoặc bởi các ô có độ cao nhỏ hơn. Hai ô gọi là kề nhau nếu độ chênh lệch giữa tọa độ X không quá 1 và chênh lệch tọa độ Y không quá 1.

Dữ liệu vào: đọc từ tập tin văn bản TOP.INP có cấu trúc:

  • Dòng đầu chứa 2 số nguyên N, M cách nhau ít nhất một khoảng trắng (1 < N ≤ 100), (1 < M ≤ 70);
  • N dòng tiếp theo mỗi dòng là M số nguyên mô tả độ cao Hij theo thứ tự của ma trận (0

≤ Hij ≤ 10000).

Kết quả: Xuất ra tập tin văn bản TOP.OUT một số N duy nhất là số đỉnh đồi tìm được.

Ví dụ:

TOP.INP TOP.OUT
8 7 3
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0
0

uses crt;

const fi='tamgiac.dat';

var f1:text;

a,b,c:array[1..100]of real;

n,i,j,k,dem:integer;

begin

clrscr;

assign(f1,fi); reset(f1);

n:=0;

while not eof(f1) do 

  begin

inc(n);

readln(f1,a[n],b[n],c[n]);

end;

dem:=0;

for i:=1 to n do 

for j:=1 to n do 

for k:=1 to n do

if (i=j) and (j=k) then

begin

  if (a[i]+b[j]>c[k]) and (a[i]+c[k]>b[j]) and (c[k]+b[j]>a[i]) then

  begin

if (a[i]=b[j]) and (a[i]<>c[k]) and (b[j]<>c[k]) then inc(dem);

if (a[i]=c[k]) and (a[i]<>b[j]) and (c[k]<>b[j]) then inc(dem);

if (b[j]=c[k]) and (b[j]<>a[i]) and (c[k]<>a[i]) then inc(dem);

end;

end;

writeln(dem);

readln;

end.

23 tháng 8 2023

m = int(input("Nhập số hàng của ma trận: "))

n = int(input("Nhập số cột của ma trận: "))

A = []

for i in range(m):

  # Nhập một dòng gồm n số nguyên cách nhau bởi dấu cách

  row = list(map(int, input(f"Nhập dòng {i+1}: ").split()))

  A.append(row)

# In ma trận A ra màn hình

for i in range(m):

  for j in range(n):

   print(A[i][j], end=" ")

  print()

const fi='tamgiac.dat';

      fo='tamgiac.out';

var f1,f2:text;

    a,b,c,d,e,f:array[1..100]of integer;

    i,n,dem1,dem2,dem3:integer;

    ab,bc,ac:real;

begin

assign(f1,fi); reset(f1);

assign(f2,fo); rewrite(f2);

readln(f1,n);

for i:=1 to n do

  readln(f1,a[i],b[i],c[i],d[i],e[i],f[i]);

dem1:=0;

dem2:=0;

dem3:=0;

for i:=1 to n do

  begin

     ab:=sqrt(sqr(a[i]-c[i])+sqr(b[i]-d[i]));

     ac:=sqrt(sqr(a[i]-e[i])+sqr(b[i]-f[i]));

     bc:=sqrt(sqr(c[i]-e[i])+sqr(d[i]-f[i]));

     if (ab>0) and (ac>0) and (bc>0) and (ab+ac>bc) and (ab+bc>ac) and

(ac+bc>ab) then

        begin

           if (ab=ac) or (ac=bc) then inc(dem1);

           if ((ab=ac) and (ab<>bc) and (ac<>bc)) then inc(dem2);

           if ((ac=bc) and (bc<>ab) and (ac<>ab)) then inc(dem2);

           if ((ac=bc) and (ac<>ab) and (bc<>ab)) then inc(dem2);

           if sqr(ab)=sqr(ac)+sqr(bc) then inc(dem3);

           if sqr(ac)=sqr(bc)+sqr(ab) then inc(dem3);

           if sqr(bc)=sqr(ab)+sqr(ac) then inc(dem3);

        end;

  end;

writeln(f2,dem1);

writeln(f2,dem2);

writeln(f2,dem3);

close(f1);

close(f2);

end.

23 tháng 8 2023

a)

m = int(input("Nhập số dòng của ma trận: "))

n = int(input("Nhập số cột của ma trận: "))

# Khởi tạo ma trận A với kích thước m x n

A = []

for i in range(m):

  row = list(map(int, input(f"Nhập dòng thứ {i+1} (gồm {n} số cách nhau bởi dấu cách): ").split()))

  A.append(row)

# In ma trận A ra màn hình

print("Ma trận A:")

for row in A:

  print(*row)

# Tính tổng các phần tử trong ma trận A

total = 0

for row in A:

  total += sum(row)

print("Tổng các phần tử trong ma trận A là:", total)

b)

# Tìm dòng có tổng các phần tử lớn nhất

max_sum = max(sum(row) for row in A)

print("Dòng có tổng các phần tử lớn nhất là:")

for i, row in enumerate(A):

  if sum(row) == max_sum:

  print(f"Dòng thứ {i+1}: {row}")

c)

Tìm các giá trị phân biệt trong ma trận A

  distinct_values = set()

for row in A:

distinct_values.update(set(row))

# In các giá trị phân biệt ra màn hình

print("Các giá trị phân biệt trong ma trận:")

print(*distinct_values)

d)

k=int(input("nhập số cần tìm"))

l=0

for i in range(m):

  for j in range(n):

   if k==a[i][j]:

    l=l+1

    print('xuất hiện ở các vị trí',i,j)

print('số',k,' xuất hiện',l,' lần')

uses crt;

const fi='doc.inp';

var f1:text;

n,i:integer;

a:array[1..255]of integer;

begin

clrscr;

assign(f1,fi); reset(f1);

readln(f1,n);

for i:=1 to n do 

 read(f1,a[i]);

min:=a[1];

for i:=1 to n do 

  if min>=a[i] then min:=a[i];

writeln(min);

close(f1);

readln;

end.