杭电oj HDOJ 2019 数列有序!
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
解题思路
把该有序序列中的每一项与m相比较,把较小的那个插入到一个新的数组中,最后形成一个新的有序序列,再进行遍历。**要注意的是m只能插入一次,只有当m比原序列的前项大且后项小时才能插入到新数组中,还要考虑到插入数组“开头”和“结尾”的两个特殊情况!**此外,还可以不用借助新数组,直接比较m和当前读取到序列中项的大小,输出较小的一个来解题。
本人的C++解决方案
#include <iostream>
using namespace std;
int main()
{
int m, n, i, num[101], temp;
while (cin>>n>>m) {
if (n == 0 && m == 0) {
break;
}
if (n > 100) {
continue;
}
for (i = 0; i <= n; i++) {
cin>>temp;
// 当m比原序列的前项大且后项小时才能插入到新数组中
if (m < temp && (m >= num[i - 1] || i == 0)) {
num[i] = m;
num[i + 1] = temp;
i++;
} else {
num[i] = temp;
}
}
for (i = 0; i <= n; i++) {
cout<<num[i];
if (i != n) {
cout<<" ";
}
}
cout<<endl;
}
return 0;
}
代码通过HDOJ平台运行检查,如发现错误,欢迎指出和纠正,谢谢!