Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- 173 * Hãy viết hàm tìm chữ số xuất hiện ít nhất trong mảng
Phân tích
int i,So[10]={0},donvi,temp;
for (i=0;i<n;i++)
{
temp = abs(a[i]);
do
{
donvi = temp%10;
temp = temp/10;
So[donvi]++;
} while (temp!=0);
}
Thông qua đoạn code trên ta hiểu thế này:
- Chữ số: thì chỉ có từ 0 -> 9 nên khai báo 1 mảng So[10] gồm 10 phần tử và đều giá trị là 0. Giá trị tương ứng tần số xuất hiện trong mảng vàTrị số tương ứng chữ số từ 0 – > 9
- cho for duyệt hết từng phần tử của mảng để tránh việc thay đổi giá trị nên dùng biến temp để làm trung gian.
- do while dùng để tách phần tử của mảng vừa lấy ra thành các chữ số.
- đồng thời gắn vào dãy số từ 0->9 (dùng mảng số đế biểu diễn) bằng cách cho trị số tại vị trí tương ứng tăng lên.
VD: 12 34 134
temp = 12
vào do while thì đơn vị = 2 và temp = 1 và So[2] += 1
…
temp = 12
vào do while thì đơn vị = 2 và temp = 1 và So[2] += 1
…
int VTMin = abs(a[0]%10);
for (i=0; i<10 ; i++)
{
if (So[i]!=0)
{
VTMin = (So[VTMin]<So[i])?VTMin:i;
}
}
sau khi thực hiện xong đoạn code 1 thì ta được 1 mảng số đã có giá trị khác nhau. theo vd trên.
VD: 12 34 134
thì ta dc 1 mảng số:
Trị số : 0 1 2 3 4 5 6 7 8 9
Giá trị: 0 2 1 2 2 0 0 0 0 0
VD: 12 34 134
thì ta dc 1 mảng số:
Trị số : 0 1 2 3 4 5 6 7 8 9
Giá trị: 0 2 1 2 2 0 0 0 0 0
như vậy để tìm chữ số xuất hiện ít nhất.
dựa vào giá trị của trị số đó. đối với ví dụ trên thì giá trị = 1 là thấp nhất thì số 2 là xuất hiện ít nhất trong mảng.
dựa vào giá trị của trị số đó. đối với ví dụ trên thì giá trị = 1 là thấp nhất thì số 2 là xuất hiện ít nhất trong mảng.
lưu ý:
- ko có dựa vào số 0 vì 0 tương ứng là không tồn tại trong mảng
int ChuSoXuatItNhat(int a[], int n)
{
int i,So[10]={0},donvi,temp;
for (i=0;i<n;i++)
{
temp = abs(a[i]);
do
{
donvi = temp%10;
temp = temp/10;
So[donvi]++;
} while (temp!=0);
}
int VTMin = abs(a[0]%10);
for (i=0; i<10 ; i++)
{
if (So[i]!=0)
{
VTMin = (So[VTMin]<So[i])?VTMin:i;
}
}
return VTMin;
}
Code
#include <stdio.h>
#include <math.h>
int ChuSoXuatItNhat(int a[], int n)
{
int i,So[10]={0},donvi,temp;
for (i=0;i<n;i++)
{
temp = abs(a[i]);
do
{
donvi = temp%10;
temp = temp/10;
So[donvi]++;
} while (temp!=0);
}
int VTMin = abs(a[0]%10);
for (i=0; i<10 ; i++)
{
if (So[i]!=0)
{
VTMin = (So[VTMin]<So[i])?VTMin:i;
}
}
return VTMin;
}
void main()
{
int a[6] = {11, 20, 31, 15, 12, 15};
int n = 6;
printf ("%d",ChuSoXuatItNhat(a,n));
}
Theo code.freetuts.net
0 nhận xét: