版权声明:如果是我原创的文章,请转载时,注明是来自我的转帖,加上我帖子的地址。谢谢! https://blog.csdn.net/mengdicfm/article/details/82730812
问题描述:
为了提高大家的程序设计水平,谢老师建立了一个校内题库。题库中共有n道题,第i道题目的难易程度用ti表示,这n道题根据由易到难的顺序已排好。现在老师决定插入m道难度为dj的题到题库中,题库中的题仍然按由易到难的顺序排好。
输入格式:
第一行包含两个用一个空格隔开的n和m。
第二行包含n个用一个空格隔开的正整数tj,表示题库中每道题的难度。
第三行包含m个用一个空格隔开的正整数dj,表示待插入的每道题的难度。
1<=tj<=32767,1<=dj<=32767,1<=n<=1000,1<=m<=1000。
输出格式:
一行若干个用一个空格隔开的正整数,表示插入后题库的试题难度情况。
输入样例1:
5 1
1 1 2 3 7
1
输出样例1:
1 1 1 2 3 7
输入样例2:
5 2
1 3 5 7 9
2 8
输出样例2:
1 2 3 5 7 8 9
#include<iostream>
using namespace std;
int main()
{
int n,m,i,j,t,k;
int a[2001];
cin>>n;
cin>>m;
//输入前n个数,放在数组的a[1]-a[n]
for(i=1;i<=n;i++)
cin>>a[i];
//输入后m个数,放在数组的a[n+1]-a[n+m]
for(i=1;i<=m;i++)
cin>>a[n+i];
// 遍历最后的m个数
for(i=n;i<=n+m;i++)
{
//如果当前的数字比前一个数字小,说明这个数字要往前挪动位置
//如果当前数字比前一个数字大,因为难度从低到高排列,就没必要挪动位置
if(a[i]<a[i-1])
{
k=i-1;
//k取当前a[i]的前一个下标
t=a[i];
//t取当前a[i]的值,也就是要往前挪动的值
while(a[k]>t)
{
a[k+1]=a[k];
k--;
}
//当前k下标对应的数字a[k]比要挪动的数字值大,说明数字还要往前挪,
//其余数据依次往后挪动,下标k在减小一个数字
a[k+1]=t;
}
}
for(i=1;i<=n+m;i++)
cout<<a[i]<<" ";
return 0;
}