Câu 1 : Hãy xây dựng hàm tìm vị trí xuất hiện đầu tiên của phần tử có số lần lặp lại nhiều nhất trong mảng a gồm n số thực.Nếu có nhiều phần tử như vậy thì chỉ cần đưa ra một.Đề nghị ghi rõ ý nghĩa của các tham số và các giá trị trả về
Tải code tại đây
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
| /* Câu 1/257/SBT Thầy NTTMK:Hãy xây dựng hàm tìm vị trí xuất hiện đầu tiên của phần tử có số lần lặp lại nhiều nhất trong mảng a gồm n số thực.Nếu có nhiều phần tử như vậy thì chỉ cần đưa ra một.Đề nghị ghi rõ ý nghĩa của các tham số và các giá trị trả về . 633.cpp */
// Các thư viện sử dụng trong chương trình .
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#define MAX 100
#define bool
// Hàm nhập mảng .
void NhapMang(int a[],int &n)
{
quaylai:printf("\nNhap vao so luong phan tu cua mang:");
scanf("%d",&n);
if(n<1||n>MAX)
{
printf("\nSo ban nhap vao khong hop le!Xin vui long nhap lai!");
goto quaylai;
}
for(int i=0;i<n;i++)
{
printf("\nNhap vao a[%d]=",i);
scanf("%d",&a[i]);
}
}
// Hàm xuất mảng .
void XuatMang(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("%4d",a[i]);
}
}
// Hàm hoán vị .
void HoanVi(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
// Hàm Copy ra mảng mới và sắp mảng tăng dần bằng thuật toán Interchange Sort .
void CopyVaSapMangTangDan(int a[],int d[],int n)
{
// Copy mảng a ra thành mảng d để lúc cuối cùng đem đi so sánh với mảng gốc ban đầu là mảng d với dữ liệu các phần tử vẫn như vậy chứ không có sự thay đổi nào cả .
int t=0;
for(int i=0;i<n;i++)
{
d[t++]=a[i];
}
// Sắp xếp mảng a tăng dần .
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
HoanVi(a[i],a[j]);
}
}
}
}
// Hàm xử lý dữ liệu .
void XuLyDuLieu(int a[],int b[],int c[],int d[],int n)
{
int dem=1,j=1;
int l=0,Co,t,vitri=0;
bool Co=false;
b[0]=a[0]; // Khởi tạo phần tử đầu tiên của mảng b bằng phần tử đầu tiên của mảng a .
for(int i=1;i<n;i++)
{
if(a[i]!=a[i-1])
{
dem++;
b[j++]=a[i]; // Đưa các giá trị phân biệt của mảng a vào trong mảng b .
}
}
for(int j=0;j<dem;j++)
{
int dem1=0;
for(int i=0;i<n;i++)
{
if(b[j]==a[i]) // So sánh các phần tử của mảng b với mảng a ban đầu .
{
dem1++; // Mỗi lần các phần tử trong mảng b bằng với mảng a thì tăng biến đếm lên . Mục đích liệt kê ra tần suất xuất hiện của các phần tử có trong mảng,mỗi phần tử liệt kê 1 lần .
}
}
c[l++]=dem1; // Lưu các tần suất xuất hiện của các phần tử phân biệt vào trong một mảng c .
}
int max=c[0]; // Khởi tạo max = phần tử đầu tiên của mảng c .
for(int l=1;l<dem;l++) // Số lượng phần tử của mảng c chính là số lượng các phần tử phân biệt của mảng a và cũng chính là số lượng phần của mảng b nên ta cho điều kiện l < dem .
{
if(c[l]>max)
{
max=c[l]; // Tìm ra tần suất xuất hiện lớn nhất .
}
}
// Khởi tạo lại vòng lặp cho phần tử của mảng b so sánh lại với mảng a với dữ liệu tần suất xuất hiện nhiều nhất đã được xác định ở trên .
for(int j=0;j<dem;j++)
{
int dem1=0;
for(int i=0;i<n;i++)
{
if(b[j]==a[i])
{
dem1++; // Mỗi lần bằng nhau thì tăng biến đếm lên .
}
}
if(dem1==max) // Nếu biến đếm bằng đúng max (tần suất xuất hiện nhiều nhất mà ta đã tìm ra ở trên ) thì sẽ đi in ra tất cả các phần tử thỏa điều kiện đó .
{
for(int t=0;t<n;t++)
{
if(d[t]==b[j]) // So sánh mảng chứa tất cả các phần tử có số lần xuất hiện nhiều nhất đó với mảng copy ra ban đầu để tìm ra phần tử đầu tiên trong mảng ban đầu có số lần xuất hiện nhiều nhất . Từ đó ta đi in ra vị trí của nó .
{
Co=true;
vitri=t;
break; // Tìm được vị trí đầu tiên thì thoát ra khỏi vòng lặp thứ nhất .
}
}
}
if(Co==true)
{
break; // Thoát ra tiếp khỏi vòng lặp thứ hai .
}
}
if(Co==true)
{
printf("\nGia Tri Dau Tien Trong Mang Co So Lan Xuat Hien Nhieu Nhat La:%d",d[vitri]);
printf("\n");
printf("\nTai Vi Tri La:%d",vitri);
printf("\n");
printf("\nSo Lan Xuat Hien La:%d",max);
}
}
// Hàm chính .
void main()
{
int a[MAX],b[MAX],c[MAX],d[MAX],n,tieptuc;
quaylai:NhapMang(a,n);
printf("\n>>>>>>>>>>>Mang Vua Nhap La:<<<<<<<<<<<<<\n");
XuatMang(a,n);
printf("\n");
CopyVaSapMangTangDan(a,d,n);
XuLyDuLieu(a,b,c,d,n);
printf("\n");
printf("\nBan co muon tiep tuc thuc hien chuong trinh hay khong ? Neu co bam phim C,nguoc lai bam bat ky 1 phim nao khac de ket thuc!");
tieptuc=getch();
if(tieptuc=='c'||tieptuc=='C')
{
system("cls");
goto quaylai;
}
}
|
Nhận xét
Đăng nhận xét