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