模拟彩票(二)——众数抽奖算法

上一期讲了如何用random产生随机数来产生中奖号码,这次讲一个如何抽取幸运号码作为中奖号码。

问题描述如下:

某平台进行抽奖活动,需要抽出一位幸运观众,抽取方式为ID号码。用户ID一共七位,该中奖ID的每一位数皆为该位的众数。如果有两个众数,则取小。

下面是实现代码:

package com.atguigu.java;

public class HelloWorld {
	private static int[] count;

	public static void main(String[] args){
		//定义五个编码
		
				int []count= {0,0,0,0,0,0,0,0,0,0};
				String[] str=new String[5];
				str[0]="2324876";
				str[1]="4214327";
				str[2]="2146726";
				str[3]="3347128";
				str[4]="3213157";
				int l=str[0].length();
				
				int num=0;
			//	int number=0;
				for(int i=0;i<l;i++)
				{	
					count[str[0].charAt(i)-'0']++;
					count[str[1].charAt(i)-'0']++;
					count[str[2].charAt(i)-'0']++;
					count[str[3].charAt(i)-'0']++;
					count[str[4].charAt(i)-'0']++;
					int max=count[0];
					
					for(int j=1;j<10;j++)
					{	
						if(count[j]>max)
						{
							max=count[j];
							num=j;
							
						}
						count[j]=0;
					//	number++;
					
					}
					System.out.print(num);
					count[0]=0;

				}
				//System.out.println("");
			//	System.out.print(number);
		
	}
	
}

上面的算法很简单,最关键的一点就是:用一个包含十个元素的数组count来记录每一位数中各个数出现的次数(因为所有数都在0~9这个范围内,故count只需要包含0~9就可以。)每当一个数出现,则count数组中下标为该数的元素+1。例如,在比较ID第一位数的时候,如果一位用户ID的第一位为1,那么a[1]则+1,如果用户第一位为2.那么a[2]+1。如此一来,该位ID所出现的所有数的出现次数都被记录下来,接下来只要找出众数即可。

上文代码中被注释掉的number是用来计算时间复杂度的。

代码运行结果如下:

如图可知,算法时间复杂度为O(n)。

好啦,本次的幸运观众的ID为:2214126。

猜你喜欢

转载自blog.csdn.net/Searchin_R/article/details/82919655