开发者社区> 问答> 正文

行数据的排序,帮忙看下哪里出错了,为什么提交ACM总是显示wrong 400 请求报错 

题目是:
Description 

有N行数据,每行有若干数量不等的整数组成。现在要对这N行数据排序。排序原则为:首先比较行中的第一个数的值,将第一个数大的行排在前面;若第一个数相等的话,则按照第二个数的值排序(若某行没有第二个数,则该行排在后面);若第二个数还是相等的话,则比较第三个数,依次类推。
 例如:
 14 38 11 89
 27 34
 27 12 34
 27
 92 2 3 1
 17 2
 排序的结果为:
 92 2 3 1
 27 34
 27 12 34
 27
 17 2
 14 38 11 89

Input 

第1行:整数T(1≤T≤10)为问题数
 第2行:第一个问题的整数N(1≤N≤1000)
 第3 ∽ N+2行:第一个问题的每行的数据ai和表示行结束的标志-1, 1≤数据个数≤50。0≤ai≤10^9, 数据之间由一个空格分隔。
 后面是第2 ∽ T个问题的数据。格式与第一个问题相同。

Output 

对于每个问题,输出排序后的结果。
 格式为:每行输出一行数据,数据之间有一个空格。

Sample Input 

2
 6
 14 38 11 89 -1
 27 34 -1
 27 12 34 -1
 27 -1
 92 2 3 1 -1
 17 2 -1
 1
 1 -1

Sample Output 

92 2 3 1
 27 34
 27 12 34
 27
 17 2
 14 38 11 89
 1

我是根据这种思路写的:
每行不足的补-2,直至长度一样,即
14        38        11        89
27        34          -2          -2
27        12        34          -2
27         -2        -2          -2
92          2          3          1
17          2          -2          -2
然后从最后一列开始排序,排完了再排下一列
 
 第四列排序:
14        38        11        89
92          2          3          1
27        34         -2          -2
27        12        34          -2
27          -2          -2          -2
17          2          -2          -2
第三列排序:
27        12        34          -2
14        38        11        89
92          2          3          1
27        34          -2        -2
27          -2         -2          -2
17          2         -2          -2
第二列排序:
14        38        11        89
27        34          -2         -2
27        12        34          -2
92          2          3          1
17          2          -2         -2
27         -2          -2          -2
第一列排序:
92          2          3          1
27        34          -2         -2
27        12        34          -2
27          -2        -2         -2
17          2          -2         -2
14        38        11        89




#include<stdio.h>
#include<stdlib.h>
struct su{
	long s[51];
}ss[1000];
int main(){
	int t,n,i,j,max,k;
	struct su temp;
	while(scanf("%d",&t)!=EOF){
		while(t--){
			scanf("%d",&n);
			for(i=0;i<n;i++)
				for(j=0;j<50;j++)
					ss[i].s[j]=-2;

				max=0;
			for(i=0;i<n;i++){//输入
				j=1;
				while(ss[i].s[j-1]!=-1){
					scanf("%ld",&ss[i].s[j]);
					j++;
				}
				if(j>max)//max保留列最大
					max=j;
			}
			
			for(j=max-1;j>=1;j--){
				for(i=0;i<n;i++){//从最后一列对每行的数进行冒泡排序
					for(k=0;k<n-i-1;k++){
						if(ss[k].s[j]<ss[k+1].s[j]){
							temp=ss[k];
							ss[k]=ss[k+1];
							ss[k+1]=temp;
						}
					}
				}
			}
			for(i=0;i<n;i++){//输出
				for(j=1;j<max-1;j++){
					if((ss[i].s[j]!=-1)&&(ss[i].s[j]!=-2))
						printf("%ld",ss[i].s[j]);
						if(j!=max-2)
							printf(" ");
				}
				printf("\n");
			}
		}
	}
	return 0;
}

展开
收起
kun坤 2020-05-29 16:15:32 516 0
1 条回答
写回答
取消 提交回答
  • 没看懂啥意思哦。######@Minuzy 华东师范的········######额?这个········,同样谢谢你啊######我也没看懂o(︶︿︶)o 这是哪个学校的题目啊,还是中文的。。。

    2020-05-29 16:15:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载