您的位置:首页 > 编程语言 > Java开发

计蒜客习题(java)-打印锯齿矩阵

2018-03-03 11:00 603 查看
题目要求:锯齿矩阵是指每一行包含的元素个数不相同的矩阵,比如:

3 5 2 6 1
1 3 22
2 2 4

读入若干对整数 (x,y)(x,y),表示在第 xx 行的末尾加上一个元素 yy。输出最终的锯齿数组。初始时矩阵为空。

输入格式

第一行输入两个整数 n,m(1 \leq n,m \leq 10000)n,m(1≤n,m≤10000),其中 nn 表示锯齿数组的行数,mm 表示插入的元素总数。
接下来一共 mm 行,每行两个整数 x,y(1 \leq x \leq n, 0 \leq y \leq 10000)x,y(1≤x≤n,0≤y≤10000),表示在第 xx 行的末尾插入一个元素 yy。

输出格式

一共输出 nn 行,每行若干个用空格分隔的整数。如果某行没有任何元素,则输出一个空行。

样例输入

3 12
1 3
2 2
2 3
2 4
3 1
3 6
1 5
1 2
1 6
3 2
3 7
1 1

样例输出

3 5 2 6 1
2 3 4
1 6 2 7
感受:用动态数组会更节省内存空间,但是才疏学浅,想半天都不知道如何实现用动态数组实现一个二维矩阵。纠结了半天还是用二维数组来得快。虽然二维数组较动态数组来说空间占用更大,但相比之下更方便访问数据。而动态数组因为其动态性,在内容为空的时候不能使用get方法访问数据。二者各有优点。对于这种有输入有范围限制的,用二维数组也不失为一个良策……
AC代码
import java.util.*;
class Main {

public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int[][]arr=new int[10005][10005];
int []count=new int[10005];
int n=cin.nextInt();
int m=cin.nextInt();
for(int i=0;i<m;i++){
int flag= cin.nextInt();
arr[flag][count[flag]]=cin.nextInt();
count[flag]++;
}
for(int i=1;i<=n;i++){
for(int j=0;j<count[i];j++){
System.out.print(arr[i][j]);
if(j!=count[i]-1)
System.out.print(" ");
}
System.out.println();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: