杭电acm2019数组解法提交上去一直提示wrong answer请问哪里错了???
#include<stdio.h>#defineM100intmain(){intn,m,a[M],i,j,t;while(scanf("%d%d",&n,&m)!=EO...
#include<stdio.h>
#define M 100
int main()
{
int n,m,a[M],i,j,t;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(m==0&&n==0)break;
else
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
if(m<a[0])
{
for(j=n;j>=1;j--)
a[j]=a[j-1];
a[0]=m;
}else if(m>a[n-1])a[n]=m;
else
{
for(i=0;i<n;i++)
if(a[i]<m&&a[i+1]>m)
{
for(j=n;j>=i+2;j--)
a[j]=a[j-1];
a[j]=m;
break;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
}
} 展开
#define M 100
int main()
{
int n,m,a[M],i,j,t;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(m==0&&n==0)break;
else
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
if(m<a[0])
{
for(j=n;j>=1;j--)
a[j]=a[j-1];
a[0]=m;
}else if(m>a[n-1])a[n]=m;
else
{
for(i=0;i<n;i++)
if(a[i]<m&&a[i+1]>m)
{
for(j=n;j>=i+2;j--)
a[j]=a[j-1];
a[j]=m;
break;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
}
} 展开
2个回答
展开全部
这是你的算法问题,这个自己解决吧
其实只要将值放在最后面,然后再排个序 就行了或者做一下输出控制就行了。
我这里给你参考一个第一种ac码,还有个第二种的码 想到的。
#include<stdio.h>
int main()
{int t,f[55],i,j,n,a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
for(i=0;i<a;i++)
scanf("%d",&f[i]);
f[a]=b;
n=a;
while(n--)
{
for(j=1;j<n+1;j++)
{
if(f[j]>f[j+1])
{t=f[j];f[j]=f[j+1];f[j+1]=t;}
}
}for(i=0;i<a;i++)
printf("%d ",f[i]);
printf("%d\n",f[i]);
}return 0;
}
还有一个:
#include<stdio.h>
int main()
{int t,f[55],i,j,n,a,b, Bflag;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
for(i=0;i<a;i++)
scanf("%d",&f[i]);
Bflag=0;
for(i=0;i<a;i++)
{
if(i==0)
{
if(f[i]>b)
{
printf("%d %d", b, f[i]);
Bflag=1;
}
else printf("%d", f[i]);
}
else if(f[i]>b)
{
printf(" %d %d", b, f[i]);
Bflag=1;
}
else
{
printf(" %d", f[i]);
}
if(!flag) printf(" %d");
printf("\n")
}
}return 0;
}
其实只要将值放在最后面,然后再排个序 就行了或者做一下输出控制就行了。
我这里给你参考一个第一种ac码,还有个第二种的码 想到的。
#include<stdio.h>
int main()
{int t,f[55],i,j,n,a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
for(i=0;i<a;i++)
scanf("%d",&f[i]);
f[a]=b;
n=a;
while(n--)
{
for(j=1;j<n+1;j++)
{
if(f[j]>f[j+1])
{t=f[j];f[j]=f[j+1];f[j+1]=t;}
}
}for(i=0;i<a;i++)
printf("%d ",f[i]);
printf("%d\n",f[i]);
}return 0;
}
还有一个:
#include<stdio.h>
int main()
{int t,f[55],i,j,n,a,b, Bflag;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
for(i=0;i<a;i++)
scanf("%d",&f[i]);
Bflag=0;
for(i=0;i<a;i++)
{
if(i==0)
{
if(f[i]>b)
{
printf("%d %d", b, f[i]);
Bflag=1;
}
else printf("%d", f[i]);
}
else if(f[i]>b)
{
printf(" %d %d", b, f[i]);
Bflag=1;
}
else
{
printf(" %d", f[i]);
}
if(!flag) printf(" %d");
printf("\n")
}
}return 0;
}
追问
你的解法真的很棒。。。但不是我想要的结果,仍然谢谢你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//*******************************************************************
// 杭电2019 数列有序! 代码已AC
// 遗漏一个等号,序列中可能有 与m 相等的数
//*******************************************************************
#include<stdio.h>
#define M 100
int main()
{
int n, m, a[M], i, j, t;
while(scanf("%d%d", &n, &m) != EOF)
{
if(m == 0 && n == 0)
break;
else
{
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
if(m < a[0])
{
for(j = n; j >= 1; j--)
a[j] = a[j - 1];
a[0] = m;
}
else if(m > a[n - 1])
a[n] = m;
else
{
for(i = 0; i < n; i++)
if(a[i] <= m && a[i + 1] > m) //遗漏一个等号
{
for(j = n; j >= i + 2; j--)
a[j] = a[j - 1];
a[j] = m;
break;
}
}
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("%d\n", a[n]);
}
}
}
//*******************************************************************
// 祝学习进步,更上一层楼 *(^-^)*
//*******************************************************************
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询