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: