acm提交平台交不上去,显示错误但自己测试没问题

问题遇到的现象和发生背景 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);

1.按照编号从小到大排序

2.对于编号相等的长方形,按照长方形的长排序;

3.如果编号和长都相同,按照长方形的宽排序;

4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;

输入格式
第一行有一个整数 0<n<10000,表示接下来有n组测试数据;
每一组第一行有一个整数 0<m<1000,表示有m个长方形;
接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,

第二个和第三个数值大的表示长,数值小的表示宽,相等
说明这是一个正方形(数据约定长宽与编号都小于10000);

输出格式
顺序输出每组数据的所有符合条件的长方形的 编号 长 宽

问题相关代码,请勿粘贴截图 #include<stdio.h>

define N 1000

typedef struct
{
int number;
int x;
int y;
}rectangle;
void paixv(rectangle *b,int n);
void del(rectangle *a,int n);
int main()
{
int n;
int k;
int c;
rectangle a[N];
scanf("%d",&n);
scanf("%d",&k);
while(n--)
{

    for(int j=0;j<k;j++)
    {
        scanf("%d%d%d",&a[j].number,&a[j].x,&a[j].y);
    }
    for(c=0;c<k;c++)
    {
        int t;
        if(a[c].x<a[c].y)
        {
            t=a[c].y;
            a[c].y=a[c].x;
            a[c].x=t;
        }
        
    }
    paixv(a,k);
    del(a,k);
    for(int m=0;m<k;m++)
    {
        if(a[m].number==a[m+1].number&&a[m].x==a[m+1].x&&a[m].y==a[m+1].y)
        {
            printf("%d %d %d",a[m].number,a[m].x,a[m].y);//del完最后会有重复的这里判断到重复时停止输出。
            printf("\n");
            break;
        
        }
    
    
        printf("%d %d %d",a[m].number,a[m].x,a[m].y);
        printf("\n");
    }
        
}
    return 0;

}
void paixv(rectangle *b,int n)//这是排序
{
int i,j;
rectangle c;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if((b[i].number>b[j].number)||(b[i].number==b[j].number&&b[i].x>b[j].x)||(b[i].number
==b[j].number&&b[i].x==b[j].x&&b[i].y>b[j].y))
{
c=b[j];
b[j]=b[i];
b[i]=c;
}
}
}

}
void del(rectangle *a,int n)//这里是先找相同的两条数据,如果找到相同的两组数据依次将相同的数据以下的数据向上移。
{
int i;
for(i=0;i<n-1;i++)
{
if(a[i].number==a[i+1].number&&a[i].x==a[i+1].x&&a[i].y==a[i+1].y)
{

    for(int k=i+1;k<n-1;k++)
    {
        
        a[k]=a[k+1];
    }
}
}

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

scanf("%d", &k); 应该放在 while 循环体中
n>1时,每一组的第一行都要重新读取一个整数,表示这一组长方形的个数

#include <stdio.h>
#define N 1000
typedef struct
{
    int number;
    int x;
    int y;
} rectangle;
void paixv(rectangle *b, int n);
void del(rectangle *a, int n);
int main()
{
    int n;
    int k;
    int c;
    rectangle a[N];
    scanf("%d", &n);
    while (n--)
    {
        scanf("%d", &k); //放在 while 循环体中
        for (int j = 0; j < k; j++)
        {
            scanf("%d%d%d", &a[j].number, &a[j].x, &a[j].y);
        }
        for (c = 0; c < k; c++)
        {
            int t;
            if (a[c].x < a[c].y)
            {
                t = a[c].y;
                a[c].y = a[c].x;
                a[c].x = t;
            }
        }
        paixv(a, k);
        del(a, k);
        for (int m = 0; m < k; m++)
        {
            if (a[m].number == a[m + 1].number && a[m].x == a[m + 1].x && a[m].y == a[m + 1].y)
            {
                printf("%d %d %d", a[m].number, a[m].x, a[m].y); //del完最后会有重复的这里判断到重复时停止输出。
                printf("\n");
                break;
            }

            printf("%d %d %d", a[m].number, a[m].x, a[m].y);
            printf("\n");
        }
    }
    return 0;
}
void paixv(rectangle *b, int n) //这是排序
{
    int i, j;
    rectangle c;
    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if ((b[i].number > b[j].number) || (b[i].number == b[j].number && b[i].x > b[j].x) || (b[i].number == b[j].number && b[i].x == b[j].x && b[i].y > b[j].y))
            {
                c = b[j];
                b[j] = b[i];
                b[i] = c;
            }
        }
    }
}
void del(rectangle *a, int n) //这里是先找相同的两条数据,如果找到相同的两组数据依次将相同的数据以下的数据向上移。
{
    int i;
    for (i = 0; i < n - 1; i++)
    {
        if (a[i].number == a[i + 1].number && a[i].x == a[i + 1].x && a[i].y == a[i + 1].y)
        {

            for (int k = i + 1; k < n - 1; k++)
            {

                a[k] = a[k + 1];
            }
        }
    }
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632