设为首页 加入收藏

TOP

个位数统计(一)
2019-03-15 22:07:55 】 浏览:153
Tags:位数 统计

题目:

 

思路:

看到题没多想,思路很明确,以string类型接收键盘输入的数字。然后将该变量转成一个整形数组。再遍历该数组,数每一个数出现了几次。将数字和出现次数以键值对的形式存入treemap。在数数之前先判断键值中是否已经有这个数了,如果有,就不用数了。

 

知识点for me:

1、在初始化数组不确定数组长度时,只能用ArrayList,可以通过add()方法添加元素。可以添加完成后,通过toArray()把它转成数组,也可以直接利用get()取出元素。

2、map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

       HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

      TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

      Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

      LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

     这道题使用TreeMap可以直接省去排序的步骤。

3、使用迭代器遍历map:

 Iterator it=tm.keySet().iterator();
        Object k;
        while(it.hasNext())
        {
            k=it.next();
            System.out.println(k+":"+tm.get(k));
        }

     在这里我一开始犯了一个错,直接System.out.println(it.next()+":"+tm.get(it.next()))了,后果就是next()一次就再往后一个元素,输出都错位了,自行想象。

4、char转成int,这次我是这么做的:Integer.parseInt(String.valueOf(s.charAt(i)))。

5、再就是,用debug调试程序真的很清楚很快,以后还要多练习。

 

上代码:

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        InputStreamReader isr=new InputStreamReader(System.in);
        BufferedReader br=new BufferedReader(isr);
        String s=null;
        try {
            s=br.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        List<Integer> list=new ArrayList();//将字符串变换成整形数组
        
        int length=s.length();
        int i,j,sum=0;
        for(i=0;i<length;i++)
        {
            list.add(Integer.parseInt(String.valueOf(s.charAt(i))));
        }
        TreeMap tm=new TreeMap();//存储所有数字和相应数量
        for(i=0;i<length;i++)
        {    
                if(tm.containsKey(list.get(i))!=true)
                {
                    for(j=0;j<length;j++)
                    {
                        if(list.get(j)==list.get(i))
                            sum++;
                        tm.put(list.get(i), sum);
                    }
                }
            sum=0;
        }
        Iterator it=tm.keySet().iterator();
        Object k;
        while(it.hasNext())
        {
            k=it.next();
            System.out.println(k+":"+tm.get(k));
        }
    }

}

 

提交成功之后,在网上观摩了一下别人写的。比我这老实孩子没动多大脑筋老老实实按第一想法写的确实要巧妙很多。也放这里学习一下。

import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
        Scanner in = new Scanner(System.in);
        //用于存储输入的数字
        String string = in.next();
        in.close();
        int[] count = new int[10];
        //遍历每个数字,并增加对应数字出现的次数
        for (int i = 0; i < string.length(); i++) {
            char c = string.charAt(i);
            count[c-'0']++;
        }
        for (int i = 0; i < count.length; i++) {
            if (count[i] != 0) {
                System.out.println(i+":"+count[i]);
            }
        }
    }
 
}

       这个程

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇loj#2483. 「CEOI2017」Building .. 下一篇C++_静态成员

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目