30/09/2018, 16:11
Chương trình sinh số ngẫu nhiên và tần suất xuất hiện nhiều nhất,nhỏ nhất
#include <iostream>
#include <cstdlib>
using namespace std;
struct TanSuat{
int giaTri;
int soLuong;
};
//Ham sinh ngau nhien 1 so trong khoang 10.000 -> 1.000.000
int ngauNhien()
{//srand(time(NULL));
//x=rand()%(n-m+1)+m;
return rand() % 990000 + 10000;
}
void inTanSuat(int *arr, int n)
{
TanSuat *danhSach = new TanSuat[n];
int index = 0;
int found = 0;
TanSuat tanSuatLonNhat;
tanSuatLonNhat.giaTri = -1;
tanSuatLonNhat.soLuong = -1;
for (int i = 0; i<n; i++)
{
found = 0;
for (int j = 0; j<index && !found; j++)
{
if (arr[i] == danhSach[j].giaTri)
{
danhSach[j].soLuong += 1;
found = 1;
//Cap nhat tan suat lon nhat
if (danhSach[j].soLuong>tanSuatLonNhat.soLuong)
{
tanSuatLonNhat.giaTri = arr[i];
tanSuatLonNhat.soLuong = danhSach[j].soLuong;
}
}
}
if (!found)
{
danhSach[index].giaTri = arr[i];
danhSach[index].soLuong = 1;
//Cap nhat tan suat lon nhat
if (danhSach[index].soLuong>tanSuatLonNhat.soLuong)
{
tanSuatLonNhat.giaTri = arr[i];
tanSuatLonNhat.soLuong = danhSach[index].soLuong;
}
index++;
}
}
//--In tan suat
cout << "So phan tu ngau nhien da duoc sinh ra:" << n << endl;
//--In tan suat lon nhat
cout << "So xuat hien nhieu nhat la: " << tanSuatLonNhat.giaTri << " voi so lan la: " << tanSuatLonNhat.soLuong << ", tan suat la: " << (tanSuatLonNhat.soLuong / (float)n) * 100 << endl;
//--In tan suat cua tung so
/*for(int j=0;j<index;j++)
{
cout<<danhSach[j].giaTri<<" xuat hien "<<danhSach[j].soLuong<<" lan, tan suat "<<(danhSach[j].soLuong/(float)n)*100<<"%"<<endl;
}*/
}
int main()
{
int n = 0;
int *arr;
cout << "Ban muon tao bao nhieu phan tu: ";
cin >> n;
arr = new int[n]; // Cap phat dong, 1 mang n phan tu
//--Sinh ngau nhien
for (int i = 0; i<n; i++)
{
arr[i] = ngauNhien();
}
inTanSuat(arr, n);
system("pause");
return 0;
}
Bài liên quan
Cái đếm tần suất này bạn có thể dùng thư viện <map> sẽ đơn giản hơn!
trc nay ko có xài nãy có bạn đề cập lên mới đụng vào tìm hiểu! chứ toàn chơi
ko có xài hàm mấy