模拟双色球

玩法说明:
双色球投注区分为红球号码区和蓝球号码区,红球号码范围为1~ 33,蓝球号码范围为1~16,双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限。

分析:
1、产生红球和蓝球
2、接收用户选号
3、验证是否中奖
4、公布本期中奖号码

实现步骤:
1、整体实现思路
2、随机取值不重复算法(分为系统部分和用户部分)
3、判断是否中奖的逻辑
4、输出结果

java实现:

import java.util.Random;
import java.util.Arrays;
import java.util.Scanner;
public class hello {
	public static void main(String args[]){
		//定义相关的变量
		int[] userRedBall = new int[6];          //用户选择的红球号码
		int[] systemRedBall = new int[6];        //系统生成的红球号码
		int userBlueBall = 0;					 //用户选择的蓝球
		int systemBlueBall = 0;					 //系统生成的蓝球
		int redCount = 0;						 //记录用户选择正确的红球数
		int blueCount = 0;						 //记录用户选择正确的蓝球数
		int[] redBall = new int[33];			 //用于存储1-33的红球号码
		
		//需要随机生成6个在1-33之间不重复的数(算法)
		for(int i=0;i<redBall.length;i++) {
			redBall[i] = i+1;
		}
		
		//游戏开始,系统提示
		System.out.println("双色球游戏开始,good luck!");
		System.out.println("请问您是要机选还是手选号码(1:机选,2:手选):");
		
		Scanner input = new Scanner(System.in);
		Random r = new Random();//生成随机数
		
		boolean flag = true;//判断输入的格式是否有误
		while(flag) {
			int isAuto = input.nextInt();
			switch(isAuto) {
			case 1:
				//机选
				computerSelection(redBall,userRedBall);//机选红球
				userBlueBall = r.nextInt(16)+1;//机选蓝球
				break;
			case 2:
				//手选
				System.out.println("请选择6个红球号码(1-33):");
				for(int i=0;i<userRedBall.length;i++) {
					userRedBall[i] = input.nextInt();
				}
				System.out.println("请选择1个蓝球号码(1-16):");
				userBlueBall = input.nextInt();
				flag = false;
				break;
			default:
				System.out.println("请问您是要机选还是手选号码(1:机选,2:手选):");
				break;
			}
		}
		//系统随机生成号码
		//红球
		computerSelection(redBall,systemRedBall);
		
		//蓝球
		systemBlueBall = r.nextInt(16)+1;
		
		//统计结果:
		//统计红球
		for(int i=0;i<userRedBall.length;i++) {
			for(int j=0;j<systemRedBall.length;j++) {
				if(userRedBall[i]==systemRedBall[j]) {
					int temp = systemRedBall[j];
					systemRedBall[j] = systemRedBall[systemRedBall.length-1-redCount];
					systemRedBall[systemRedBall.length-1-redCount] = temp;
					redCount++;
					break;
				}
			}
		}
		
		//统计蓝球
		if(userBlueBall==systemBlueBall) {
			blueCount = 1;
		}
		
		//验证是否中奖(把条件成功率高的放前面,这样效率高)
		if(blueCount==0 && redCount<=3) {
			System.out.println("革命尚未成功,通知仍需努力");
		}else if(blueCount==1 && redCount<3) {
			System.out.println("中了六等奖,5块钱!");
		}else if((blueCount==1 && redCount==3) || (blueCount==0 && redCount==4)) {
			System.out.println("中了五等奖,10块钱!");
		}else if((blueCount==1 && redCount==4) || (blueCount==0 && redCount==5)) {
			System.out.println("中了四等奖,200块钱!");
		}else if(blueCount==1 && redCount==5) {
			System.out.println("中了三等奖,3000块钱!");
		}else if(blueCount==0 && redCount==6) {
			System.out.println("中了二等奖,150W!");
		}else if(blueCount==1 && redCount==6) {
			System.out.println("中了一等奖,500W!");
		}else {
			System.out.println("系统有误,中奖无效!");
		}
		
		//公布系统号码
		System.out.println("本期中奖红球号码为:");
		sort(systemRedBall);
		System.out.println(Arrays.toString(systemRedBall));
		System.out.println("本期中奖蓝球号码为:"+systemBlueBall);
		
		//公布用户号码
		System.out.println("您选择的红球号码为:");
		sort(userRedBall);
		System.out.println(Arrays.toString(userRedBall));
		System.out.println("您选择的蓝球号码为:"+userBlueBall);
	}
	
	//冒泡排序
	public static void sort(int[] ball) {
		for(int i=0;i<ball.length-1;i++) {
			for(int j=0;j<ball.length-1;j++) {
				if(ball[j]>ball[j+1]) {
					ball[j] = ball[j] + ball[j+1];
					ball[j+1] = ball[j] - ball[j+1];
					ball[j] = ball[j] - ball[j+1];
				}
			}
		}
	}
	
	//用于在指定数列中,随机生成多个不重复的数算法
	public static void computerSelection(int[] redBall,int[] userRedBall) {
		Random r = new Random();
		int index = -1;
		for(int i=0;i<userRedBall.length;i++) {
			index = r.nextInt(redBall.length-i);
			userRedBall[i] = redBall[index];
			
			int temp = redBall[index];
			redBall[index] = redBall[redBall.length-1-i];
			redBall[redBall.length-1-i] = temp;
		}
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
php双色球在线机选程序V1.0(支持复式机选) 运行环境: php5.0及以上 安装方法: 上传所有文件到服务器. 本人平生也经常购买福彩双色球,本人不相信所谓的规律,我只相信运气。 所以每次选号都是直接机选。后来时间长了,我觉得福彩的那个售票系统的机 选程序不够强大,应该也不是严格意义上的机选。所以决定用php写一个机选 的程序,于是自已起草了程序的基本需求如下: 分析双色球的玩法规则: 其实就是红色球和蓝色球组成的一组号码,红色球的 数字范围为1~33,蓝色球的范围为1~16,所以机选双色球的程序要考虑以下内容 : 1. 先机选出红色球部份,也就是在数字1~33之间,随机取6个数字,而且这6个 数字不能重复,最后对这6个数字进行从小到大进行排序。这时候,我们已经产 生了双色球红球部份的6个号码。当然,如果是复式机选,红球的个数则是 7~20个,所以如果是复式机选的话,红色球的个数根据具体的个数在1~33中产 生具体个数的红色号码. 2.然后再机选出蓝色球部份,也就是在数字1~16范围内,随机取1个数字.当然 如果是复式机选,则相应产生多个蓝色球,也就是在数字1~16范围内,产生多 个不重复的号码 3.组合机选出来的红色球和蓝色球的号码,合并后进行输出。这样一注双色球 就产生了。 程序的核心算法和原理: 1.机选的实现: 红色球部份,先将1~33这33个常数放在一个数组中,也就是这个数组中有33个 数组元素,然后将这个数组元素的排列,使用函数将其随机打乱,最后截取某 一段。 2.用户单式和复式的判断,以及用户注数的判断使用GET模式的URL传值进行赋 值。 本程序原是本人自用的程序,如果错误或BUG,请真指正。现将本程序进行开 放源代码,方便有需要有人进行使用和改进。 程序演示地址: http://www.12580.info/cp/ssq 程序的下载地址: 说明:如对CSS有造诣的同事,可以帮忙修改一下表单和网页样式,使其美观。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值