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:
/************************************************************
#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ả:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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 |
Leave a Reply