Trang chủ Tin Học Lớp 8 Cho một dãy gồm N nguyên không âm A1, A2,...

Cho một dãy gồm N nguyên không âm A1, A2, …, AN. Yêu cầu: Hãy tìm hai số trong dãy để tạo ra một phân số có giá trị lớn nhất nhỏ hơn 1. Dữ liệu vào: Từ tệp văn

Câu hỏi :

Cho một dãy gồm N nguyên không âm A1, A2, …, AN. Yêu cầu: Hãy tìm hai số trong dãy để tạo ra một phân số có giá trị lớn nhất nhỏ hơn 1. Dữ liệu vào: Từ tệp văn bản MAXF.INP gồm: + Dòng đầu ghi số nguyên N (2 ≤ N ≤ 105) + Dòng thứ hai ghi N số nguyên A1, A2, …, AN (Ai ≤ 105, i = 1…N). Giữa các số được ghi cách nhau một dấu cách. Kết quả: Ghi ra tệp văn bản MAXF.OUT hai số tìm được theo thứ tự từ nhỏ đến lớn. Nếu bài toán có nhiều hơn một kết quả thì in hai số nhỏ hơn. Nếu không tìm được kết quả theo yêu cầu bài toán thì ghi số -1. Ví dụ: -Input: 5 4 6 9 2 1 - output: 4 6

Lời giải 1 :

var i,n,m1,m2:longint;
    a:array[0..100001] of longint;
    f1,f2:text;
procedure sort(l,r:longint);
var i,j,x,t:longint;
begin
    i:=l;j:=r;x:=a[(l+r) div 2];
    repeat
        while a[i] < x do inc(i);
        while a[j] > x do dec(j);
        if i<=j then
            begin
                t:=a[i];a[i]:=a[j];a[j]:=t;
                inc(i);dec(j);
            end;
    until i>j;
    if l<j then sort(l,j);
    if i<r then sort(i,r);
end;
begin
    assign(f1,'MAXF.INP');reset(f1);
    assign(f2,'MAXF.OUT');rewrite(f2);
    readln(f1,n);
    for i:=1 to n do read(f1,a[i]);
    sort(1,n);
    m1:=0;m2:=1;
    for i:=1 to n-1 do
        if (a[i]<>a[i+1]) and (a[i+1]<>0) then
           if a[i]/a[i+1]>m1/m2 then
              begin
                  m1:=a[i];
                  m2:=a[i+1];
              end;
    writeln(f2,m1,' ',m2);
    close(f1);close(f2);
end.

Thảo luận

Lời giải 2 :

program Hello;
var n,i,j,a,b:longint;
    c:array[1..1000000] of longint;
begin
    readln(n);
    for i:= 1 to n do
        read(c[i]);
    for i:= 1 to n do
        for j:= i+ 1 to n do
            if c[i] > c[j] then
            begin
                b:= c[i];
                c[i]:= c[j];
                c[j]:= b;
            end;
    for i:= 1 to n-1 do
        if (c[i]/c[i+1] > a/b) and (c[i]/c[i+1] < 1) then
            begin
                a:= c[i];
                b:= c[i + 1];
            end;
    writeln(a, ' ', b);
readln;
readln;
end.

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 8

Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần, sang năm lại là năm cuối cấp áp lực lớn dần nhưng các em vẫn phải chú ý sức khỏe nhé!

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK