Nhập vào mảng 1 chiều gồm n số nguyên (N<=100).Đưa ra số lần xuất hiện của mỗi phần tử trong mảng.
VD N=6 Dãy A: 3 3 4 0 4 3
So lan xuat hien so 3 la: 3
So lan xuat hien so 4 la: 2
So lan xuat hien so 0 la: 1
Nhập vào mảng 1 chiều gồm n số nguyên (N<=100).Đưa ra số lần xuất hiện của mỗi phần tử trong mảng.
VD N=6 Dãy A: 3 3 4 0 4 3
So lan xuat hien so 3 la: 3
So lan xuat hien so 4 la: 2
So lan xuat hien so 0 la: 1
Duyệt từng phần tử mảng rồi đếm số lần xuất hiện của các phần tử cần tìm.
program mang;
var b,a:array[1..100]of integer;
i,j,n,tg,k:integer;
begin
write('nhap n:');readln(n);
for i:=1 to n do begin
write('nhap phan tu thu ',i,':');readln(a[i]);
end;
for i:=1 to n do
for j:=i+1 to n do
if a[i]>a[j] then begin
tg:=a[i];a[i]:=a[j];a[j]:=tg; end;
k:=1;b[k]:=1;
while n>0 do begin if a[n]=a[n-1] then begin n:=n-1;b[k]:=b[k]+1
end else begin writeln(a[n],' ',b[k]);k:=k+1;b[k]:=1;n:=n-1;end;end;
readln;
end.
bài này tuy không tối ưu nhưng đúng đó bạn thử chạy nhak nếu sai thỳ góp ý
[/color]
thu vs test nhu pan kia bao thi` no' ra caj' j` i'
4 23 30 1
de1 nghi xem laj viet hoan chinh giup em
Được sửa bởi alviss1011 lúc 15:58 ngày 23-01-2010 Reason: Bổ sung bài viết
CÁi này chơi úp cờ, dựng cờ cũng đc há
Bài này tui có cách giải như sao:
-kiểm tra từng phần tử và đếm số lần xuất hiện của nó.
-Kiểm tra xem phần tử đó được xuất rồi chưa, nếu chưa thì thưcj hiện công việc đếm và xuất.
Code:
Var a:array[1..100] of integer;
n,i,j,k,dem:integer;
kt:boolean;
begin
clrscr;
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to n do
begin
kt:=true;
for j:=1 to i-1 do if a[i]=a[j] then kt:=false;
if kt then
begin
dem:=0;
for k:=1 to n do
if a[i]=a[k] then inc(dem);
writeln(a[i],' xuat hien ',dem,' lan');
end;
end;
readln;
end.
tai sao lai dung if kt then??????????/
Hình như chưa ổn lắm! Alviss1011 ? hay lắm.
Ý tưởng của mình như sau :
- Dùng 2 mảng int. 1 mảng chứa các số nhập vào (A), 1 mảng chứa số lượng các số (B).
- Hàm countArray() để đếm số lượng các số ở mảng A đưa vào mảng B. Cần lưu ý cách đưa vào mảng B như sau :
B[0] chứa số lượng số của số thứ nhất mảng A
B[1] chứa số lượng số của số thứ hai mảng A
..........
Tuy nhiên cách này khiến việc hiển thị gặp khó khăn. Nên trong hàm cần kiểm tra để nếu số trong mảng A xuất hiện lại thì coi như số lượng số ở vị trí đó bằng 0.
- Cách hiển thị : Nếu B[i]>0 -> số lần xuất hiện của A[i] là B[i]. Mấy phần râu ria như tạo mảng.. các bạn tự làm nhé.
Mảng B[100] khởi tạo giá trị ban đầu bằng 0.
public void countArray()
{
int count =0;
for(int i=0;i<A.length;i++)
{
for(int j=0;j<A.length;j++)
{
if(A[i]==A[j])
{
if(j<i) // kiem tra so nay da xuat //hien la lan so sanh truoc
{
count=0;
break;
}
else{
count++;
}
}
}
B[i]=count;
count = 0;
}
}
- Hien thi :
public static void main(String[] arg) throws IOException
{
hehe C = new hehe();// hehe la class chính
C.countArray();
for(int i=0; i<C.B.length;i++)
{
if(C.B[i]>0)
{
System.out.println("So lan xuat hien cua "+C.B[i]);
System.out.println(C.B[i]);
}
}
}
ý tưởng của mình :
- không cần dùng mảng để lưu dãy, trong quá trình nhập xét luôn
- dùng 1 mảng để lưu kq, kq[i] là số lần xuất hiện của số có giá trị i
Code:uses crt; var i,n,a,max:integer; kq:array[1..255] of byte; yet:set of byte; begin clrscr; write('Nhap n : ');readln(n); for i:=1 to n do begin write('Nhap a[',i,'] : '); readln(a); if a>max then max:=a; if not (a in yet) then yet:=yet+[a]; inc(kq[a]); end; for i:=1 to max do if i in yet then writeln(i,' : ',kq[i]); readln; end.
Bookmarks