Chắc suất Đại học top - Giữ chỗ ngay!! ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.
Nhập vào 1 dãy số nguyên N. Viết ct tìm số lớn thứ 2 trong dãy, nếu có nhiều số giống nhau thì in ra vị trí các số đó
Vấn đề chính là tìm được số lớn thứ 2. Tìm được rồi thì sẽ dễ thôi.Nhập vào 1 dãy số nguyên N. Viết ct tìm số lớn thứ 2 trong dãy, nếu có nhiều số giống nhau thì in ra vị trí các số đó
for i := 2 to N do
if a[i] > Max1 then
begin
Max2 := Max1;
Max1 := a[i];
end;
gans max2= max1 chi vay banVấn đề chính là tìm được số lớn thứ 2. Tìm được rồi thì sẽ dễ thôi.
Mã:for i := 2 to N do if a[i] > Max1 then begin Max2 := Max1; Max1 := a[i]; end;
Lúc đầu a gán max1 với max2 như thế nào? @trà nguyễn hữu nghĩaVấn đề chính là tìm được số lớn thứ 2. Tìm được rồi thì sẽ dễ thôi.
Mã:for i := 2 to N do if a[i] > Max1 then begin Max2 := Max1; Max1 := a[i]; end;
Max1 là số lớn nhất còn max2 là số lớn thứ 2.gans max2= max1 chi vay ban
thanksMax1 là số lớn nhất còn max2 là số lớn thứ 2.
Theo mình hiểu là thế này nhé: Khi đã có một số lớn nhất (là Max1) mà vẫn còn một số lớn hơn nữa thì số lớn nhất hiện tại là số lớn thứ 2. Cứ thế sẽ tìm được số lớn thứ 2.
Nhưng nếu số lơn nhất của e ở đầu dãy thì code của a sẽ ko có kết quả =). Nó sẽ ra luôn a[1]lúc đầu cho max1 = Max2 = a[1]
[tex]ghi a[I] dc ko[/I][/tex]lúc đầu cho max1 = Max2 = a[1]
hay là làm theo ý tưởng như trên ta. Tìm số lớn nhất rồi xét hiệu đóNhưng nếu số lơn nhất của e ở đầu dãy thì code của a sẽ ko có kết quả =). Nó sẽ ra luôn a[1]
uses crt;
var a:array[1..100] of integer;
n,i,j,m,k,t:integer;
begin
clrscr;
write('Nhap n:');readln(n);
for i:=1 to n do
begin
write('a[',i,']:');
readln(a[i]);
if i=1 then begin m:=a[1];t:=1;end else if a[i]>m then begin m:=a[i];t:=i;end;
end;
if t=1 then
begin
j := a[2];
for i := 2 to n do if a[i]>j then j:=a[i];
end else
begin
j := a[1];
for i:=1 to n do
if (a[i]>j) and (a[i]<m) then j:=a[i];
end;
for i := 1 to n do if a[i]=j then inc(k);
writeln('So lon thu nhi la:',j);
if k>1 then
begin
write('Cac vi tri cua so do la:');
for i := 1 to n do if a[i]=j then write(i,#32);
end;
readln
end.
Mà bài của e vẫn sai ((. thôi tìm hiệu cho nhanhBài e làm thử này, a xem có đúng không: @trà nguyễn hữu nghĩa
Nếu không thì ta sort cả mảng theo thứ tự từ lớn đến bé, tìm max rồi lấy số sau max là đượcMã:uses crt; var a:array[1..100] of integer; n,i,j,m,k,t:integer; begin clrscr; write('Nhap n:');readln(n); for i:=1 to n do begin write('a[',i,']:'); readln(a[i]); if i=1 then begin m:=a[1];t:=1;end else if a[i]>m then begin m:=a[i];t:=i;end; end; if t=1 then begin j := a[2]; for i := 2 to n do if a[i]>j then j:=a[i]; end else begin j := a[1]; for i:=1 to n do if (a[i]>j) and (a[i]<m) then j:=a[i]; end; for i := 1 to n do if a[i]=j then inc(k); writeln('So lon thu nhi la:',j); if k>1 then begin write('Cac vi tri cua so do la:'); for i := 1 to n do if a[i]=j then write(i,#32); end; readln end.
Lúc đầu là a nghĩ cái này. Nhưng lại phải sắp xếp lại thì nó sai vị trí ban đầu mất rồi.Bài e làm thử này, a xem có đúng không: @trà nguyễn hữu nghĩa
Nếu không thì ta sort cả mảng theo thứ tự từ lớn đến bé, tìm max rồi lấy số sau max là đượcMã:uses crt; var a:array[1..100] of integer; n,i,j,m,k,t:integer; begin clrscr; write('Nhap n:');readln(n); for i:=1 to n do begin write('a[',i,']:'); readln(a[i]); if i=1 then begin m:=a[1];t:=1;end else if a[i]>m then begin m:=a[i];t:=i;end; end; if t=1 then begin j := a[2]; for i := 2 to n do if a[i]>j then j:=a[i]; end else begin j := a[1]; for i:=1 to n do if (a[i]>j) and (a[i]<m) then j:=a[i]; end; for i := 1 to n do if a[i]=j then inc(k); writeln('So lon thu nhi la:',j); if k>1 then begin write('Cac vi tri cua so do la:'); for i := 1 to n do if a[i]=j then write(i,#32); end; readln end.
Hiệu có vẻ là dễ nhất. Không thì a áp dụng tổng cx được. Nhưng mà vấn đề là làm thế nào để nhỡ có 2 số max thì có thể loại được 1 số trong phần xétLúc đầu là a nghĩ cái này. Nhưng lại phải sắp xếp lại thì nó sai vị trí ban đầu mất rồi.
Muốn vậy phải tạo thêm một mảng nữa. Nhưng cách này không hay.
uses crt;
var a:array[1..100] of integer;
n,i,j,m,k,t:integer;
begin
clrscr;
write('Nhap n:');readln(n);
for i:=1 to n do
begin
write('a[',i,']:');
readln(a[i]);
if i=1 then begin m:=a[1];t:=1;end else if a[i]>m then begin m:=a[i];t:=i;end;
end;
if t=1 then
begin
j := a[2];
for i := 2 to n do if (a[i]>j) and (a[i]<m) then j:=a[i];
end else
begin
j := a[1];
for i:=1 to n do
if (a[i]>j) and (a[i]<m) then j:=a[i];
end;
for i := 1 to n do if a[i]=j then inc(k);
writeln('So lon thu nhi la:',j);
if k>1 then
begin
write('Cac vi tri cua so do la:');
for i := 1 to n do if a[i]=j then write(i,#32);
end;
readln
end.
Xem ra có vẻ hiệu là ổn nhất. chỉ cần xét hiệu nhỏ nhất và số đang xét khác max là được roàiBài của e đây, a check thử xem. E sửa r =)))
Mã:uses crt; var a:array[1..100] of integer; n,i,j,m,k,t:integer; begin clrscr; write('Nhap n:');readln(n); for i:=1 to n do begin write('a[',i,']:'); readln(a[i]); if i=1 then begin m:=a[1];t:=1;end else if a[i]>m then begin m:=a[i];t:=i;end; end; if t=1 then begin j := a[2]; for i := 2 to n do if (a[i]>j) and (a[i]<m) then j:=a[i]; end else begin j := a[1]; for i:=1 to n do if (a[i]>j) and (a[i]<m) then j:=a[i]; end; for i := 1 to n do if a[i]=j then inc(k); writeln('So lon thu nhi la:',j); if k>1 then begin write('Cac vi tri cua so do la:'); for i := 1 to n do if a[i]=j then write(i,#32); end; readln end.
nếu mún in vị trí thì mik lam sVấn đề chính là tìm được số lớn thứ 2. Tìm được rồi thì sẽ dễ thôi.
Mã:for i := 2 to N do if a[i] > Max1 then begin Max2 := Max1; Max1 := a[i]; end;