1034: 稀疏数组java

题目描述
稀疏数组就是数组中大部分内容都没有被使用(或都为0),在数组中仅有少部分空间使用,导致内存空间的浪费。
为了节省空间,现在将下列稀疏数组进行压缩。
数组为n行m列,存在一大部分是0表示该位置未被使用,非0则表示已经使用。
将所有非0元素按照(行下标、列下标、元素值)存储下来,完成稀疏数组的压缩。

输入
第一行为两个整数n,m(1<=n,m<=50)
接下来n行,每行m个元素表示稀疏数组。

输出
输出第一行先输出n,m,x。x表示非0元素数目 。接下来x行,每行输出行下标、列下标、元素值。
按照行下标从小到大的顺序输出,如果同一行按照列下标从小到大的顺序输出。

样例输入
10 10
0 3 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 2 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 5 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 6 0 0

样例输出
10 10 5
0 1 3
3 0 1
3 1 2
5 6 5
9 7 6

import java.util.Scanner;

public class Main {
     
	
	public static void main(String[] args) {
     
		Scanner sc=new Scanner(System.in);
		int n = sc.nextInt();//输入行数
		int m = sc.nextInt();//输入列数
		int [][]a=new int[n][m];//创建二维数组
		for(int i=0;i<n;i++)//输入二维数组
			for(int j=0;j<m;j++)
			{
     
				a[i][j]=sc.nextInt();
			}
		//1.先遍历二维数组得到非零数据的个数
        int sum = 0;
        for (int i = 0; i < n; i++) 
        {
     
            for (int j = 0; j < m; j++) 
            {
     
                if (a[i][j] != 0)
                {
     
                    sum++;
                }
            }
        }
        //2遍历二维数组将非零的值存放到稀疏数组
        int[][] b = new int[sum+1][3];//创建压缩后的数组
        int count = 0;
        for(int i=0;i<a.length;i++)//a.length是a数组行数
        {
     
        	for(int j=0;j<a[i].length;j++)//a[i].length是数组列数
        	{
     
        		if(a[i][j]!=0)
        		{
     
        			count++;
        			b[count][0]=i;
        			b[count][1]=j;
        			b[count][2]=a[i][j];
        		}
        	}
        }
        System.out.println(n+" "+m+" "+sum);
        for (int i = 1; i < b.length; i++) 
        {
     
        	
            System.out.println(b[i][0]+" "+b[i][1]+" "+b[i][2]);
        }

	}
					
}

你可能感兴趣的:(基础题java)