杭电ACM2019求大神啊,验证过的,就是无法AC

2024-12-17 11:39:11
推荐回答(3个)
回答1:

问题出在最后处理中间插入的时候。
前面只处理了ab[n-1],那么循环里应该是if(a>=b[i] && a<=b[i+1]),厅棚颂就是把a=b[0]和a=b[n-1]的情况加上。
还有一点就是for(i=0;i修改后的代码:代码也是AC的。
#include
main()
{
int n,a,b[100],i,k;
while(scanf("%d%d",&n,&a)!=EOF&&n>=0&&n<=100)
{
if(n==0&&a==0) break;
for(i=0;iif(a{
printf("%d",a);
for(i=0;iprintf("\n");
continue;
}
if(a>b[n-1])
{
for(i=0;iprintf("扮郑%d",a);
printf("\n");
continue;
}
for(i=0;i{
if(a>=b[i]&&a<=b[i+1]) k=i; /和派/ 处理相等的情况
}
for(i=0;i<=k;i++) printf("%d ",b[i]);
printf("%d",a);
for(i=k+1;iprintf("\n");
}
}
代码逻辑没有问题,就是我说的两个地方修改一下就Accept了。满意请采纳,有问题请追问。

回答2:

for(i=0;i{
if(a>b[i]&&a}

里面的a>b[i] 和 a= 和 <= 即可AC

即改为:
for(i=0;i{
if(a>=b[i]&&a<=b[i+1]) k=i;
}

因为数衡绝列里激拦洞会有相等元素的情况 ,插入的数也明枯可能跟数列中某个数相等

回答3:

//已AC,改动较大,你的代码做的特殊处理太多很容易出错,我把前两个需要continue的特殊处理都给去掉了,代码变短了许多。
#include
void main()
{
int n,a,b[100],i,flag;
while(scanf("%d%d",&n,&a)!=EOF&&n>=0&&n<=100)
{
if(n==0&&a==0) break;
for(i=0;i//=====此前未做修改=====
for(i=0,flag=1;i{
if(a < b[i] && flag) //a比b[i]小并且flag为真时插入a
{
printf("%d",a);
printf(" %d",b[i]);
flag = 0; //a插入后flag归则庆零
}
else
{
if(a < b[i])
printf("% d",b[i]); //a插入后
else
printf("%d ",b[i]); //a插入前
}
}
if(flag) //最后flag仍未归零表示a尚未插入
printf("%d ",a);
putchar('神让\n');
}
}