数列有序! HDU - 2019
题目 [HDU - 2009]
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Time limit | Memory limit | OS | Source |
---|---|---|---|
1000 ms | 32768 kB | Windows | C语言程序设计练习(二) |
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Example
Input | Output |
---|---|
3 3 1 2 4 0 0 | 1 2 3 4 |
问题链接: [HDU - 2019]
问题描述
将一个整数插入到一个有序整数数列中,插入后依然有序,且当n,m同时为0时结束
问题分析
原来有n(n<=100)个整数,插入一个数,让这个数和其中的数的前后比较当>=前面的数,同时<=后面的数时,这个数应该是要插入到这的,然后将这个位置以后的数都往后移动一位,就是可以将第n+1个数的值等于前面的数,直到插入的那个位置后面一个数。
代码
AC代码
#include<iostream>;
using namespace std;
int main()
{
int n, m;
int a[105];
while (cin >> n >> m&&(n!=0||m!=0))
{
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
if (a[i] <= m && a[i + 1] >= m)
{
for (int j = n; j > i; j--)
{
a[j] = a[j - 1];
}
a[i + 1] = m;
break;
}
}
for (int i = 0; i <= n; i++)
{
cout << a[i];
if (i<n)cout << ' ';
if(i==n)cout << endl;
}
}
}
代码分析
if (a[i] <= m && a[i + 1] >= m)
{
for (int j = n; j > i; j--)
{
a[j] = a[j - 1];
}
a[i + 1] = m;
break;
}
这段是在寻找那个插入的位置,找到以后,将后面的数都往后移一位,然后才插入找到的位置