6/4/16

[C] 173 Hãy viết hàm tìm chữ số xuất hiện ít nhất trong mảng

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
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
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.
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 Han Huy
Theo code.freetuts.net

0 nhận xét: