Yêu cầu:
Viết chương trình nhập vào dãy số a gồm n số nguyên ( n <= 100 ).
• Hãy đảo ngược dãy đó.
Ví dụ: Nhập a: 3 4 5 2 0 4 1
Dãy sau khi đảo: 1 4 0 2 5 4 3
• (*)Hãy kiểm tra xem dãy đã cho có thứ tự chưa? (dãy được gọi là thứ tự khi là dãy tăng hoặc dãy giảm ).
Thuật toán:
Code:
/************************************************************
#include "stdio.h"
#include "conio.h"
#include "string.h"
#define INT_SIZE sizeof(int)
#define ARR_MAX 100
void invert_arr(int A[], int n);
bool is_order_arr(int A[], int n);
void print_arr(int A[], int n, char name_arr);
void main()
{
int A[] = {6, 5, -2, 3, 5, 4, 14, 11, 9, 16, 0, -1, 12};
int n = sizeof(A)/INT_SIZE;
print_arr(A, n, 'A');
invert_arr(A, n);
print_arr(A, n, 'B');
if(is_order_arr(A, n))
printf("\nArray A is order");
else
printf("\nArray A isn't order");
getch();
}
//Invert array
void invert_arr(int A[], int n)
{
int i, j = n-1;
int temp;
for(i = 0; i < n/2; i++)
{
temp = A[i];
A[i] = A[j];
A[j] = temp;
j--;
}
}
//Check whether array is order or not?
//Return: true: if to be order array
//Return: false: otherwise
bool is_order_arr(int A[], int n)
{
//bool asend_flg = false, descend_flg = false;
int i;
bool res = true;
if(n < 2)
{
return false;
}
if(A[0] >= A[1])
{
for(i = 1; i < n-1; i++)
if(A[i] < A[i+1])
return false;
}
else
{
for(i = 1; i < n-1; i++)
if(A[i] > A[i+1])
return false;
}
return true;
}
//Display array
void print_arr(int A[], int n, char name_arr)
{
int i;
printf("\n=============================");
for(i = 0; i < n; i++)
{
printf("\n%c[%d] = %d", name_arr, 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 26 27 28 29 |
============================= A[0] = 6 A[1] = 5 A[2] = -2 A[3] = 3 A[4] = 5 A[5] = 4 A[6] = 14 A[7] = 11 A[8] = 9 A[9] = 16 A[10] = 0 A[11] = -1 A[12] = 12 ============================= B[0] = 12 B[1] = -1 B[2] = 0 B[3] = 16 B[4] = 9 B[5] = 11 B[6] = 14 B[7] = 4 B[8] = 5 B[9] = 3 B[10] = -2 B[11] = 5 B[12] = 6 Array A isn't order |
Leave a Reply