写程序:对于一组元素列表,和一个待查元素,输出此元素插入到这个列表并排序后的列表中,应该在什么位置

1.题目描述
请编写一个程序,对于一组元素构成列表,和一个待查元素,输出待查元素如果插入到这些元素排序后的列表中,应该插入到什么位置。
2.输入
第一行是一个整数n,在区间[1, 20]之中,表示有多少个测试用例。
对于每一个测试用例,第一行是一个整数mi(在区间[1, 10000]之中),表示第i个测试用例中有多少数据元素。第二行是一个整数,是待查元素。后面紧跟mi行,每一行是一个整数。

3.输出
对于每一个测试用例,输出一个整数,表示待查元素应该插入到排序后的列表的什么位置(是一个下标)。如果列表中已经有一个或多个与待查元素值相同的元素(这些元素肯定在排序后集中在一起,中间没有其它元素),则待查元素要插入到所有这些相同值的元素后面。

4.示例输入

3
4
15
20
1
3
41
5
3
7
3
9
3
1
2
10
10000
1000

5.示例输出
2
3
0

6.对示例输入和示例输出数据的解释
对于第一个测试用例,共有4个元素,待查元素是15,列表中的4个元素是 20, 1, 3, 41,排序后,它们是 1, 3, 20, 41,因此,15应该插入到20所在的位置,即2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
int n;
scanf("%d",&n);
if(n>=1&&n<=20)
{
int i=0;
for(;i<n;i++)
{
int mi;
scanf("%d",&mi);
if(mi<=10000&&mi>=1)
{
int *arr=(int *)malloc(mi*sizeof(int));
int t,j,xn,temp;
scanf("%d",&xn);
for(j=0;j<mi;j++)
scanf("%d",&arr[j]);
for(t=0;t<mi;t++)
{
for(j=0;j<mi-1-t;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(j=0;j<mi;j++)
{
if(xn<arr[j])
{
printf("%d\n",j);
break;
}
}
}
}
}
system("PAUSE");
return 0;
}

根据你题目的要求,写了个程序,你看看嘛。
这个题目其实没什么难度,处理好数据输入的顺序,核心算法就是将一个数组进行排序,之后轮询查找输出待查元素应该插入的位置即可。
我写这个程序是没个测试用例输完就输出结果,若要修改输出方式,自己根据要求修改即可。
温馨提示:答案为网友推荐,仅供参考