C语言实验题 数列有序!描述有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序. 输入输入数据包含多个测试实例,每组数据
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/30 21:27:13
C语言实验题 数列有序!描述有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序. 输入输入数据包含多个测试实例,每组数据
C语言实验题 数列有序!
描述
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序.
输入
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列.n和m同时为0标示输入数据的结束,本行不做处理.
输出
对于每个测试实例,输出插入新的元素后的数列.
样例输入
3 3
1 2 4
0 0
样例输出
1 2 3 4
我自己的编码如下:
#include<stdio.h>
int main()
{
int m,n,i,a[1000],t,j;
while(scanf("%d %d",&n,&m),n!=0||m!=0)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
if(m>=a[n])
{
printf("%d",a[1]);
for(i=2;i<=n;i++) printf(" %d",a[i]);
printf(" %d\n",m);
}
else if(m<=a[1])
{
printf("%d",m);
for(i=1;i<=n;i++) printf(" %d\n",a[i]);
}
else
{
for(i=1;i<=n;i++)
{
if(m<=a[i]) t=i;
}
for(i=1;i<t;i++) printf("%d ",a[i]);
printf("%d ",m);
for(t=i;t<n;t++) printf("%d ",a[t]);
printf("%d\n",a[n]);
}
}
}
我的思路就是先进行判断,如果是前面两种情况的话,就先输出.如果不是的话,那m肯定是在这个数列的中间,然后根据我的代码进行输出.可是,如图:
第一个图的数据是3 3,输出完全正确;第二个是6 8,但是由于数列的最后三个数据不同,后面那个竟然错了.本人看了许久,看不出来错在哪里,求大神指教.谢谢!
C语言实验题 数列有序!描述有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序. 输入输入数据包含多个测试实例,每组数据
/*#include
int main()
{
void print(float*x,int n);
void change(float*x,int k);
int k = 5;
float float_a[10] = {1.2,4.5,58.9,2.1,3.6,5.6,8.4,9.6,73.4,87.0};
printf("原始的数列:\n");
print(float_a,10);
change(float_a,k);//把前五个数据置0
printf("前%d个数据置0后的数列:\n",k);
print(float_a,10);
return 0;
}
void print(float*x,int n)
{
for(int i =0; i < n; i++)
printf("%f ",x[i]);
printf("\n");
}
void change(float*x,int k)
{
for(int i =0; i < k; i++)
x[i] = 0;
}
*/
#include
int main()
{
int m,n,i,a[1000] ={0},t,j;
while(scanf("%d %d",&n,&m),n!=0||m!=0)
{
for(i=1;i=a[n])
{
printf("%d",a[1]);
for(i=2;i