数列有序
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
提交时总是超时
不知道哪里还可以改进
#include<stdio.h>
int main(){
int m,n,i;
int a[101];
while(~scanf("%d %d",&m,&n)&&(m!=0||n!=0)){
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++){
if(a[i-1]<=m&&a[i]>=m){
a[i+1]=a[i];
a[i]=m;
}
}
for(i=0;i<=n-1;i++){
printf("%d ",a[i]);
}
printf("%d",a[i]);
}
}
while(~scanf("%d %d",&m,&n)&&(m!=0||n!=0)){
这种玩弄技巧而毫无可读性的代码应该改正。
100个数字插入,这种算法超时只有一个原因,就是你玩弄技巧导致输入的代码有问题,或者产生了死循环。
你没有给出m n的含义,也不知道你的输入是什么样的格式,这个你自己检查下。
#include<stdio.h>
int main()
{
int a[1000],q[1000],b,c,d,i,l,t;
scanf("%d",&b);
for(i=0;i<b;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&c);
a[b]=c;
for(i=0;i<=b;i++)
q[i]=a[i];
for(l=0;l<b+1;l++)
for(i=0;i<b-l;i++)
if(q[i]>q[i+1])
{
t=q[i];q[i]=q[i+1];q[i+1]=t;
}
for(i=0;i<=b;i++){
if(i==b)
printf("%d",q[i]);
else printf("%d ",q[i]);
}
}
超时的主要原因是你循环了一遍在数组中查找m的位置造成的,没必要将m插入到数组a中再输出数组a,直接输出即可,试试如下代码:
#include<stdio.h>
int main(){
int m,n,i;
int a[101];
while(~scanf("%d %d",&m,&n)&&(m!=0||n!=0))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(a[i] >= m)
break;
else
printf("%d ",a[i]);
}
if(i==n)
printf("%d",m);
else
{
printf("%d ",m);
for(;i<n-1;i++)
printf("%d ",a[i]);
printf("%d",a[n-1]);
}
printf("\n");
}
return 0;
}