随机数字统计

要求:

  随机生成50个数字(整数),每个数字的范围是[10, 50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出 来,如果某个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。

版本一:(使用数组实现)

import java.util.Random;

public class HomeWork
{
	public static void main(String[] args)
	{
		int[] count = new int[50];//统计每个数字出现的次数
		for(int i=0; i<50; i++)
		{
			int number = new Random().nextInt(41) + 10;//生成[10,50]之间的随机数
			count[number-10]++;	//充分利用数组下标提供的信息,利用下标信息得到具体的数字,而数组里面的值代表具体的数字出现的次数,这样,一个数组就搞定了两方面的需求。例如,count[0],count[1]分别代表10和11出现的次数,依次类推...
		}

		for(int i=0; i<count.length; i++)
		{
			if(count[i] != 0)
			{
				System.out.println((i+10)+"出现的次数是:"+count[i]);
			}
		}

		int max = count[0];
		for(int i=0; i<count.length; i++)//找到那个最大的次数
		{
			if(count[i] > max)
			{
				max = count[i];
			}
		}

		for(int i=0; i<count.length; i++)
		{
			if(count[i] == max)
			{
				System.out.println("出现次数最多的数字是:"+(i+10)+",次数是:"+count[i]);
			}
		}
	}
}
/*
在Eclipse中的输出结果是:
	12出现的次数是:1
	13出现的次数是:3
	14出现的次数是:3
	15出现的次数是:1
	16出现的次数是:3
	17出现的次数是:1
	20出现的次数是:1
	22出现的次数是:4
	23出现的次数是:3
	24出现的次数是:4
	27出现的次数是:1
	28出现的次数是:1
	29出现的次数是:2
	30出现的次数是:2
	31出现的次数是:2
	32出现的次数是:1
	33出现的次数是:1
	34出现的次数是:1
	37出现的次数是:3
	43出现的次数是:2
	46出现的次数是:2
	48出现的次数是:3
	49出现的次数是:1
	50出现的次数是:4
	出现次数最多的数字是:22,次数是:4
	出现次数最多的数字是:24,次数是:4
	出现次数最多的数字是:50,次数是:4
*/

版本二:(使用集合实现)

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;

public class HomeWorkStd
{
	public static void main(String[] args)
	{
		Map map = new TreeMap();//存储数字及其出现的次数(key为数字,value数字为出现的次数)尝试HashMap map
		Random random = new Random();

		for(int i=0; i<50; i++)
		{
			int number = random.nextInt(41) + 10;
			Integer in = new Integer(number);
			if(map.get(in) == null)
			{
				map.put(in, new Integer(1));
			}
			else
			{
				int value = ((Integer)map.get(in)).intValue();
				map.put(in, new Integer(value + 1));
			}
		}

		Collection col = map.values();
		Integer maxOccurs = (Integer)Collections.max(col);//可以自己实现找到最大次数,但是尽量用jdk提供的,因为其效率大部分情况下可能比自己写的要高。

		Set set = map.entrySet();
		List list = new ArrayList();//存储出现次数最大的数字

		for(Iterator iter=set.iterator(); iter.hasNext();)
		{
			Map.Entry entry = (Map.Entry)iter.next();

			Integer key = (Integer)entry.getKey();
			Integer value = (Integer)entry.getValue();

			if(value.intValue() == maxOccurs.intValue())
			{
				list.add(key);
			}

			System.out.println(key + ":" + value);
		}

		System.out.println("出现最多次数为" + maxOccurs);

		System.out.println("这些数字分别是:");
		for(Iterator iter=list.iterator(); iter.hasNext();)
		{
			System.out.println(iter.next());
		}

		/*另一种方式
 		//找到最大的次数(自己实现)
		Collection coll = map.values();
		int max = 0;//假设最大的次数为零
		for(Iterator iter = coll.iterator(); iter.hasNext();)
		{
			Integer value = (Integer)iter.next();
			if(value.intValue() > max)
				max = value.intValue();
		}
		//输出出现次数最多的数
		Set set = map.keySet();
		for(Iterator iter = set.iterator(); iter.hasNext();)
		{
			Integer key = (Integer)iter.next();
			if(((Integer)map.get(key)).intValue() == max)
			{
				System.out.println("出现次数最多的数有:" + key + ",次数为:" + max);
			}
		}
		*/
	}
}

版本三:(简化版,使用集合,利用泛型、自动装箱/拆箱技术)

import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;

public class StatisticRandomNumber
{
	public static void main(String[] args)
	{
		TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();

		Random random = new Random();
		int temp;
		for(int i=0; i<50; i++)
		{
			temp = random.nextInt(41) + 10;
			if(map.get(temp) == null)
				map.put(temp, 1);
			else
				map.put(temp, map.get(temp) + 1);
		}

		Set<Map.Entry<Integer, Integer>> mapSet = map.entrySet();
		for(Iterator<Map.Entry<Integer, Integer>> iter=mapSet.iterator(); iter.hasNext();)
		{
			Map.Entry<Integer, Integer> entry = iter.next();
			System.out.println("Key:" + entry.getKey() + ", Value:" + entry.getValue());
		}

		Collection<Integer> col = map.values();
		int maxValue = Collections.max(col);
		System.out.println("出现最多次数为:" + maxValue);
		System.out.println("这些数字有:");
		for(Iterator<Map.Entry<Integer, Integer>> iter=mapSet.iterator(); iter.hasNext();)
		{
			Map.Entry<Integer, Integer> entry = iter.next();
			if(entry.getValue() == maxValue)
			{
				System.out.println(entry.getKey());
			}
		}

	}
}
时间: 2024-10-12 14:26:18

随机数字统计的相关文章

sql 生成唯一随机数字字符串

oracle 实现快速批量生成随机数字字符串: --表 create table RANDOM_NUMBER_TEMP ( ROW_NUM NUMBER default 0 not null, RANDOM_NUM VARCHAR2(30) not null ) --type type number_array_t is table of number index by binary_integer; --实现生成唯一随机数 PROCEDURE INIT_RANDOM_NUMBRE(P_QUAN

用struts做一个带有随机数字的图片验证登录模块

在我们平常的工作中,登录模块有一个小的功能,就是图片验证模块,今天我就把步骤一步一步写出来. 1.新建一个web service,然后再WebRoot写,一个contentType="image/jpeg"格式的image.jsp页面,最后一句代码是将页面以图片输出. 1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <%@ page contentType="im

SDUT OJ 1704 数字统计问题

SDUT OJ 1704 数字统计问题 博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40930259 昨天晚上学弟问了OJ上这个题,群里说不清楚,就写个解题报告吧. 题目大意: 中文题目,就不翻译了-.- 解题思路: 不知道算不算一个典型的数位DP,反正有点那个意思,感觉确实也可以用记忆话搜索,两个差不多的意思. 我找了一下,这个问题好像是算法设计与实验题解上面的一道题,别的OJ上没有,所以就在自己OJ上做了. 大体的思路

生成多个不重复的随机数字php

这个没什么好废话的:直奔主题来说思路: 首先是要用mt_rand()函数生成指定个数的随机数字: 然后使用array_unique()函数去重: 因为去重了:所以得到的数字就不够指定个数了: 所以:核心是要用while循环:直到得到指定个数的数字: 到这里基本可以是结束了: 对于追求完美的人来说:还可以再用个sort(): 目的不是要用来排序:主要是将得到的数组key格式化: 用代码来说话:就如下: /** * 生成不重复的随机数 * @param  int $start  需要生成的数字开始范

数字统计(0)&lt;P2010_1&gt;

数字统计   (two.pas/c/cpp) [问题描述] 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数.  比如给定范围[2, 22],数字 2 在数2中出现了 1次,在数 12中出现 1 次,在数 20 中出现 1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6次.  [输入] 输入文件名为 two.in.  输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开.  [输出] 输出文件名为 two.out.  输

一款纯css3实现的数字统计游戏

今天给大家分享一款纯css3实现的数字统计游戏.这款游戏的规则的是将所有的数字相加等于72.这款游戏的数字按钮做得很美观,需要的时候可以借用下.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <h1> CSS Counter Game</h1> <section> <h2> Pick the numbers that add up to 72:</h1> <input id="a" type=&q

AC日记——数字统计 openjudge 1.5 41

41:数字统计 总时间限制:  1000ms 内存限制:  65536kB 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次. 输入 输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开. 输出 输出共 1 行,表示数字 2 出现的次数. 样例输入 样例 #1: 2 22 样例 #2: 2 100 样

数字统计问题

1.      一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如第6页用6表示而不是06或006.数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9. 思路:对于n位数,例如3位数,000-999,出现0,1,2...9的次数相同,记每个数字出现的次数为avg,这10个数字出现的总次数为sum=10*avg. 而n位数共有10^n个数,每个具体的数对于sum的贡献为n次. 得到:10

生成随机数字,字符

1.让每次启动程序运行都能产生不同的随机数: #include <cstdlib> int main() { srand(time(0));// set a new seed for random function } 2.产生随机数 在srand statement 之后: (1)产生0到a的随机数:rand%(a+1); eg:产生0到9:rand%(10): (2)产生a到b的随机数:a + rand(b-a+1): eg:产生50到99: 50+rand%50: (3)产生p到q的随机