1.按照编号从小到大排序
2.对于编号相等的长方形,按照长方形的长排序;
3.如果编号和长都相同,按照长方形的宽排序;
4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;
输入格式
第一行有一个整数 0<n<10000,表示接下来有n组测试数据;
每一组第一行有一个整数 0<m<1000,表示有m个长方形;
接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,
第二个和第三个数值大的表示长,数值小的表示宽,相等
说明这是一个正方形(数据约定长宽与编号都小于10000);
输出格式
顺序输出每组数据的所有符合条件的长方形的 编号 长 宽
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];
}
}
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!