0011:数字统计

  

总时间限制:

1000ms

内存限制:

100000kB

描述

输入n个整数,统计每个数出现的次数.

输入

第一行是一个整数n(1<=n<=1000),接下来n行每行一个整数.

输出

第一行输出总共有多少个不同的整数.
接下来每行输出一个整数及这个整数出现的次数,用空格分隔.
输出的整数的顺序与它们在输入中第一次出现的顺序一致(即在输入中先出现的数,也会在输出中先出现)

样例输入

5
2
3
2
1
2

样例输出

3
2 3
3 1
1 1

方法一:基础实现代码

此题略坑,想复杂了

 


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    	Scanner in=new Scanner(System.in);
       int n=in.nextInt();
       int arr[]=new int[10];
       int xu[]=new int[10];
       
       int ans=0,j=1;
       for(int i=1;i<=n;i++) {
    	   int temp=in.nextInt();
    	   arr[temp]++;
    	   xu[j]=temp;
    	   int t=1;
    	   for(int k=1;k<j;k++) {
    		   if(xu[k]==temp) {
    			   t=0;
    		   }
    	   }
    	   if(t!=0) {
    		   j++;
    		   xu[j]=temp;
    		  
    	   }
       }
       for(int i=0;i<10;i++) {
    	   if(arr[i]!=0) {
    		   ans++;
    	   }
       }
    	System.out.println(ans); 
    	for(int i=1;i<=ans;i++) {
    		if(arr[xu[i]]!=0) {
    			System.out.print(xu[i]+" ");
    			System.out.println(arr[xu[i]]);
    		
    		}
    	}
       
    }
}

方法二LinkedHashMap实现代码:

/*同过LinkedHashMap实现*/
import java.util.Scanner;
import java.util.Set;
import java.util.LinkedHashMap;
public class Main{
	static LinkedHashMap<Integer,Integer>map1=new LinkedHashMap<Integer,Integer>();
	static void calcute(int n) {
		if(map1.containsKey(n)) {
			map1.put(n,map1.get(n)+1);
		}
		else
		{
			map1.put(n, 1);
		}
	}
	public static void main(String[]args) {
		Scanner in=new Scanner (System.in);
		int n=in.nextInt();
		for(int i=1;i<=n;i++)
		{
			calcute(in.nextInt());
		}
		Set<Integer>keyset=map1.keySet();///返回该集合中的 的所有key对象形成的keyset()集合
		System.out.println(map1.size());
		for(Integer key:map1.keySet()) {
			System.out.println(key+" "+map1.get(key));
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会敲代码的小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值