Chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.

Yêu cầu:

– Chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.

(Nếu mảng có nhiều phần tử có cùng giá trị lớn nhất. Thì chèn X vào phía sau tất cả các phần tử có giá trị lớn nhất.)

Thuật toán:

Tìm vị trí của phần tử lớn nhất trong mảng

– Chèn phần tử X vào sau phần tử lớn nhất

Code:

/************************************************************
* Author: VNCODING
* History 
* 2014/11/14 first create VNCODING
*************************************************************/
#include "stdio.h"
#include "conio.h"

int max(int A[], int n);
void insert_behind_max(int A[], int *n, int x);
void print_arr(int A[], int n);

void main( void )
{
    int A[] = {1, -9, 13, 27, 5, 9, 2, 10, 12, 27};
    int len = sizeof(A)/sizeof(int);
    printf("\nMang truoc khi chen 0");
    //insert 0 after each maximum element of array
    print_arr(A, len);
    insert_behind_max(A, &len, 0);
    printf("\nMang sau khi chen 0");
    print_arr(A, len);
    getch();
}

// Find maximum value in array
int max(int A[], int n)
{
    int i;
    int maxElmt = A[0];
    for(i = 1; i < n;i++)
    {
        if(maxElmt < A[i])
        {
            maxElmt = A[i];
        }
    }
    return maxElmt;
}

// Append x to max value
void insert_behind_max(int A[], int *n, int x)
{
    int i, j;
    int maxElmt = max(A, *n);
    for(i = *n - 1; i >= 0; i--)
    {
        if(A[i] == maxElmt)
        {
            (*n)++;
            for(j = *n - 1; j > i; j--)
            {
                A[j] = A[j-1];
            }
            A[j+1] = x; 
        }
    }
}

// Display array
void print_arr(int A[], int n)
{
    int i;
    for(i = 0; i < n; i++)
    {
        printf("\nA[%d] = %d", i, A[i]);
    }
}

Kết quả:

Mang truoc khi chen 0
A[0] = 1
A[1] = -9
A[2] = 13
A[3] = 27
A[4] = 5
A[5] = 9
A[6] = 2
A[7] = 10
A[8] = 12
A[9] = 27

Mang sau khi chen 0
A[0] = 1
A[1] = -9
A[2] = 13
A[3] = 27
A[4] = 0
A[5] = 5
A[6] = 9
A[7] = 2
A[8] = 10
A[9] = 12
A[10] = 27
A[11] = 0

2 Comments on Chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.

    • Hi Trần Đức Trịnh, biến n là kích thước của mảng (vừa là input và output). Sau khi chèn thêm phần tử vào, kích thước mảng tăng nên, biến n lưu kích thước mảng sau khi chèn thêm phần tử.

Leave a Reply