Bài tập cơ bản về lập trình C++

Bài 01 : Hãy đếm số lượng chữ số nguyên dương n.

int soluongchuso(int n)
{
    int count = 0;
    while(n!=0)
    {
        count ++;
        n = n/10;        
    }
    return count;
}

Bài 02 : Hãy tìm chữ số đảo ngược của số nguyên dương.

int sodao(int n)
{
    int donvi = 0;
    int sodao = 0;
    while(n!=0)
    {
        donvi = n % 10;
        sodao  = sodao * 10 + donvi;
        n = n / 10; 
    }
    return sodao;
}

Bài 03 : Hãy đếm số lượng chữ số lớn nhất của số nguyên n.

int demsoluong(int n)
{
    int dem = 0;
    int max = 0;
    int donvi = 0;
    while(n != 0 )
    {
       donvi = n % 10;
       if(donvi == max)
       {
           dem ++;
       }
       if( donvi > max)
       {
           max = donvi; 
           dem  = 1;
       }
       n = n / 10;
    }
    printf("%d - %d : ",max,dem);
    return dem;
}

Bài 04 : Tìm ước số nguyên lớn nhất của hai số nguyên dương.

int usln(int a,int b)
{
    while(a!=b)
    {
        if(a > b)
        {
            a = a - b;
        }
        else
        {
            b = b - a;
        }
    }
    return a;
}
Advertisements

Bài tập mảng một chiều C++

Bài 01 : Cho mảng một chiều các số nguyên.Hãy viết hàm tìm chữ số xuất hiện nhiều nhất trong mảng.

int timchuso(int a[],int n)
{
    int temp[100];
    int max = 0;
    int number = a[0];
    // Khởi tạo giá trị 0 cho mảng
    for(int j = 0;j<100;j++)
    {
        temp[j]=0;
    }
    //Tìm chữ số xuất hiện
    for(int i = 0 ; i < n ; i++)
    {
        temp[a[i]]=temp[a[i]] + 1;
        if(max < temp[a[i]])
        {
           max = temp[a[i]];
           number = a[i];
        }
    }
    printf("%d\n",max);
    return number;
}

Bài 02 : Cho mảng một chiều các số nguyên.Hãy viết hàm tìm số chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng.

int timsochanlonnhat(int a[],int n)
{
    int minle = 2147483647; // số nguyên lẻ lớn nhất
    int maxchan = -2147483648;  // số nguyên chẵn nhỏ nhất
    for(int i = 0;i < n; i++)
    {
       if(a[i]%2==0)
       {
           if(maxchan < a[i] && minle > a[i] )
           {
               maxchan = a[i];
           }
       }
       else
       {
           if(minle > a[i])
           {
               minle = a[i];
           }
       }
    }
    return maxchan;
}

Bài 03 : Hãy đếm số lượng các giá trị phân biệt có trong mảng

int demchusokhacnhau(int a[],int n)
{
	int dem = 1;
	bool flag = false;
	for(int i = 0;i<n;i++)
	{
         for( int  j = i + 1;j < n ;j++)
		 {
			 flag = false;
			 if(a[i]==a[j])
			 {
				flag = true;
                                break;
			 }
			 if(!flag && j==n-1)
			 {
				 dem ++;
			 }
		 }
		 break;
	}
	return dem  ;
}

Bài 04 : Hãy liệt kê tần suất xuất hiện của các giá trị xuất hiện trong mảng.

void lietke(int a[],int n)
{
    int dem = 0;
    for(int i = 0 ; i < n ; i++)
    {
        dem = 0;
        for(int j  = 0 ; j < n ; j++)
        {    
            if(a[i] == a[j])
            {
                 if(i <= j)
                 {
                   dem ++ ;
                 }
                 else 
                 {
                     break;   
                 }
            }
        }
        if(dem != 0)
        {
             printf("%d : %d ",a[i],dem);
        }
    }
}

Bài 05 : Thêm x phần tử ở vị trí thứ k vào mảng một chiều.

void them(int a[],int k, int x,int n)
{
    for(int i = n ; i > k ;i --)
    {
        a[i] = a[i-1];
    }
    n ++;
    a[k] = x;
}

Bài 06 : Xóa phần tử trùng trong mảng một chiều.

void xoa(int a[],int n)
{
	for(int i = 0;i<n-1;i++)
	{
		for(int j = i + 1 ;j< n;j++)
		{
			if(a[i]==a[j]){
				int index = j;
				for(int k = index +1;k<n;k++)
				{
					a[k-1] = a[k];
				}
				n--;
			}
		}		
	}
}

Bài 07 : Xóa phần tử x trong mảng một chiều.

void xoa(int a[],int n,int x)
{
        int count = 0;
	for(int i = 0;i<n;i++)
	{
           if(a[i]==x)
           {
               count ++;  
           }
           else
           {
               a[i-count]=a[i];
           } 
	}
        n -=count;
}