问:有 n 个整数已按由小到大的顺序排列好,要求输入一个整数,把它插入到原有数列中, 而且仍然保持有序,同时输出新的数列。
(插入时应考虑到插入的数的各种可能性,比所有 的数都小;比所有的数都大;在最大数和最小数之间)
答:
#include <iostream>
#include <stdio.h>
using namespace std;
template <class T>
int getArrayLen(T& array)
{
return (sizeof(array) / sizeof(array[0]));
}
int main()
{
while (true)
{
int i, j, k, t, b;
int a[] = { 2, 4 };
int len = getArrayLen(a);
// 输入一个整数(&b)
printf("Please input a number:\n");
scanf_s("%d", &b);
if (b > a[len - 1]) // b > 最大值
{
a[len] = b;
}
else if (b < a[0]) // b < 最小值
{
a[len] = b;
for (i = 0; i < (len + 1); i++)
{
t = a[i];
a[i] = a[len];
a[len] = t;
}
}
else if (b >= a[0] && b <= a[len - 1])//b >= 最小值 && b <= 最大值
{
for (j = 0; j < len; j++)
{
if (b <= a[j])
{
k = j;
break;
}
}
a[len] = b;
for (i = k; i < (len + 1); i++)
{
t = a[i];
a[i] = a[len];
a[len] = t;
}
}
// 打印
for (i = 0; i < len + 1; i++)
{
printf("%d ", a[i]);
}
}
return 0;
}