CCF 201403-2 窗口 c语言代码(100分&&30分),为何错了?

1.100分代码

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    
    
    int x1;
    int y1;
    int x2;
    int y2;
    int num;//输入时的编号
}Lnode;
int main()
{
    
    
    int N,M,i,j,x,y,count=0,k,flag=0;
    scanf("%d",&N);
    scanf("%d",&M);
    Lnode lnode[N];//其中每一项的num编号代表输入时的编号,即窗口的编号。而在数组中的顺序代表窗口的由下到上的顺序
    Lnode lnodee;//用来记录被点击的窗口
    int fruit[M];//输出结果数组,初始为0。最后输出时若为0则输出IGNORED
    for(i=0;i<M;i++)
        fruit[i]=0;
    for(i=0;i<N;i++)//N个窗口
    {
    
    
        scanf("%d",&lnode[i].x1);
        scanf("%d",&lnode[i].y1);
        scanf("%d",&lnode[i].x2);
        scanf("%d",&lnode[i].y2);
        lnode[i].num=i+1;
    }
    for(k=0;k<M;k++)//M次点击
    {
    
    
        flag=0;
        scanf("%d",&x);
        scanf("%d",&y);
        for(i=N-1;i>=0;i--)//从最上层开始检验
        {
    
    
            if((x>=lnode[i].x1&&x<=lnode[i].x2)&&(y>=lnode[i].y1&&y<=lnode[i].y2))
            {
    
    
                printf("%d\n",lnode[i].num);
                if(i!=N-1)//若点击到的这个窗口不是最最上面的窗口(即第一层),则将该层上面的窗口依次下移,把该层放在最上面
                {
    
    
                    lnodee=lnode[i];
                    for(j=i;j<=N-2;j++)
                    {
    
    
                        lnode[j]=lnode[j+1];
                    }
                    lnode[N-1]=lnodee;
                }
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
    
    
            printf("IGNORED\n");
        }
    }
    return 0;
}

2.30分代码:关键代码没变,主要修改了一下输出的部分的代码。将结果放入一个数组中统一最后输出,然后就错了。为何?

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    
    
    int x1;
    int y1;
    int x2;
    int y2;
    int num;//输入时的编号
}Lnode;
int main()
{
    
    
    int N,M,i,j,x,y,count=0,k;
    scanf("%d",&N);
    scanf("%d",&M);
    Lnode lnode[N];//其中每一项的num编号代表输入时的编号,即窗口的编号。而在数组中的顺序代表窗口的由下到上的顺序
    Lnode lnodee;//用来记录被点击的窗口
    int fruit[M];//输出结果数组,初始为0。最后输出时若为0则输出IGNORED
    for(i=0;i<N;i++)//N个窗口
    {
    
    
        scanf("%d",&lnode[i].x1);
        scanf("%d",&lnode[i].y1);
        scanf("%d",&lnode[i].x2);
        scanf("%d",&lnode[i].y2);
        lnode[i].num=i+1;
    }
    for(i=0;i<M;i++)
        fruit[i]=0;
    for(k=0;k<M;k++)//M次点击
    {
    
    
        scanf("%d",&x);
        scanf("%d",&y);
        for(i=N-1;i>=0;i--)//从最上层开始检验
        {
    
    
            if((x>=lnode[i].x1&&x<=lnode[i].x2)&&(y>=lnode[i].y1&&y<=lnode[i].y2))
            {
    
    
                fruit[count++]=lnode[i].num;//将点击到的最上层的窗口的编号存入结果数组
                if(i!=N-1)//若点击到的这个窗口不是最最上面的窗口(即第一层),则将该层上面的窗口依次下移,把该层放在最上面
                {
    
    
                    lnodee=lnode[i];
                    for(j=i;j<=N-2;j++)
                    {
    
    
                        lnode[j]=lnode[j+1];
                    }
                    lnode[N-1]=lnodee;
                }
                break;
            }
        }
    }
    for(i=0;i<M;i++)//结果表的输出
    {
    
    
        if(i!=M-1)
        {
    
    
            if(fruit[i]!=0)
            {
    
    
                printf("%d\n",fruit[i]);
            }else
                printf("IGNORED\n");
        }else{
    
    
            if(fruit[i]!=0)
            {
    
    
                printf("%d",fruit[i]);
            }else
                printf("IGNORED");
        }

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44142774/article/details/112506623