CCF 201403-2 Window c language code (100 points &&30 points), why is it wrong?

1.100 points code

#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 points code: the key code has not changed, mainly modified the output part of the code. Put the result into an array to unify the final output, and then it is wrong. Why?

#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;
}

Guess you like

Origin blog.csdn.net/weixin_44142774/article/details/112506623