『壹』 关于java算法编程的 做一个小游戏,电脑随机生成三个骰子(每个骰子点数为1~6),将这三个数相加。
1 设计一个int数组!长度为3.
2 设计3个变量!a, b, c. 分别取值为1-6.int a= new Random(6)+1.重复b, c.
3 把a, b, c放入数组中!
4 循环遍历数组把三内个元素相容加 输出这把总和是
5 判断总和能否被2整除,如果能,输出是双数,不能输出是单数!
6 判断大小 大于等于4&&小于等于10 显示开小
大于等于11&&小于等于17显示开大
7 遍历数组 判断三个元素是否相等 相等显示开豹子。。
手机打字!!有什么问题在问吧
『贰』 JAVA抽奖的算法
优先级规则使高等奖尽量在后期抽出
importjava.util.LinkedList;
importjava.util.List;
publicclassGetGift{
//奖品仓库
privateList<Gift>gifts=newLinkedList<Gift>();
publicGetGift(){
//生成一堆奖品放进奖品仓库
//一等奖一个优先级1,二等奖两个优先级2。。。20等奖20个优先级20
for(inti=1;i<=20;i++){
GiftTypegt=newGiftType(i+"等奖",i,i);
for(intj=1;j<=i;j++){
gifts.add(newGift(i+"等奖——第"+j+"号",gt));
}
}
}
//抽奖
publicsynchronizedGift穗凳蠢getGift(){
intrandomNumber=(int)(Math.random()*total());
intpriority=0;
for(Giftg:gifts){
priority+=g.getType().getPriority();
if(priority>=randomNumber){
//从奖品库移出奖品
gifts.remove(g);
returng;
}
}
//抽奖次数多于奖品时,没有奖品
returnnull;
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
GetGiftgg=newGetGift();
//一共生成210个奖品,抽210次,多抽显示null
for(inti=0;i<猜陪210;i++){
System.out.println(gg.getGift());
}
}
//计算总优先级,内部使用
privateinttotal(){
intresult=0;
for(Giftg:gifts){
result+=g.getType().getPriority();
}
returnresult;
}
}
//记录奖品的信息
//如1等奖共1个,优先级为1最难抽
classGiftType{
//名字(如1等奖)
privateStringname;
//这种奖品的数量,数量越大越容易抽到
privateintquantity;
//这种奖品的优先粗伍级,最小为1,数越大越容易抽到
privateintpriority;
publicGiftType(Stringname,intquantity,intpriority){
this.name=name;
this.quantity=quantity;
this.priority=priority;
}
publicintgetPriority(){
returnpriority;
}
@Override
publicStringtoString(){
return"GiftType[name="+name+",quantity="+quantity+",priority="+priority+"]";
}
}
//奖品
classGift{
//每个奖品有唯一id,抽奖不会重复,格式为"16等奖——第8号"
privateStringid;
//这个奖品的类别
privateGiftTypetype;
publicGift(Stringid,GiftTypetype){
this.id=id;
this.type=type;
}
publicGiftTypegetType(){
returntype;
}
@Override
publicStringtoString(){
return"Gift[id="+id+",type="+type+"]";
}
}
『叁』 java实现以下算法:有6个数组a,b,c,d,e,f,从每个数组中取出一个数值,按顺序放进指定的数组q中,
package Bai_17;
public class NumberSort {
public static void sort(int[][] root, int[] number){
int[] result = new int[number.length];
for(int i =0;i<number.length;i++){
result[i] = root[i][number[i]];
}
for(int i =0;i<result.length;i++){
for(int j= i;j<result.length-1;j++){
if(result[j]>result[j+1]){
int tmp = result[j];
result[j]=result[j+1];
result[j+1]=result[j];
}
}
}
for(int i=0;i<result.length;i++){
System.out.print(result[i]);
}
}
public static void main(String args[]){
int myvalue[][] = new int[6][6];
int[] number = {5,4,3,2,1,0};
//int count =0;
for(int i =0;i<myvalue.length*myvalue[0].length;i++){
//myvalue[0] = {1,2,3,4,5,6};
myvalue[i/6][i%6]=i;
}
sort(myvalue,number);
}
}
基本的思路。。不过还要debug。。里面的myvalue[][] 定义了你的六个数组。
然后number[]对应的就是从myvalue里面index来取值。这程序是从第一个数组里面的第5个,第二个数组的第四个。。。。取出来之后排序。打印
如果不会debug的话,要等以后了。。
『肆』 求java算法:根据物品的数量来确定抽奖的概率(当物品数量为0时无论如何都不可能选到)
public class Lottery {
private int m = 1000;//发放奖券的数量
private int n = 2;//奖品的数量
public boolean getLottery(){
boolean isLottery = false;
double d = (double)n/(double)m;//中奖概率
double r = Math.random();//0~1之间的随机数,包括0
if(r<d){//如果随版机数小于权概率 那么中奖
n--;//奖品数量-1
isLottery = true;
}
m--;//奖券数量-1
return isLottery;
}
}
『伍』 java 算法 双色球
每一步都做成了一个单独的方法来做,
所以稍显复杂,不过注释都写了。
完成
1.产生7个随机数
2.验证是否存在相同随机数
3.确定号码选择区域
4.排序
//package com.color.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DoubleBall {
//用来保存产生的每注双色球号码
private List<int[]> ballList;
//保存一注号码的数组
private int[] ball;
//红色球号码总和的开始区域
private int START;
//红色球号码总和的结束区域
private int END;
/**
* 构造方法
* @param number,产生号码的数量
*/
public DoubleBall(){
Scanner s = new Scanner(System.in);
System.out.println("===请输入产生随机号码数量===");
int number = s.nextInt();
this.init();
//完成ballList的初始化
ballList = new ArrayList<int[]>();
for(int i=0;i<number;i++){
//初始化ball
ball = new int[7];
//产生一注号码
ball = this.createBall(ball);
while(true){
int count = 0;
//将所有的号码去掉最后一个号码后相加,用来验证是否在指定的区域内
for(int j=0;j<ball.length-1;j++){
count += ball[j];
}
//如果产生的号码不在指定的区域内,重新产生号码
if(!(count>START && count <END)){
ball = this.createBall(ball);
//否则,退出while,将ball添加到list之中
}else{
break;
}
}
ball = this.sort(ball);
//将这注产生的号码添加到list之中
ballList.add(ball);
}
}
/**
* 产生双色球的七个号码
* @param ball
* @return
*/
public int[] createBall(int[] ball){
for(int i=0;i<ball.length;i++){
//默认最后一个号码保留给蓝色球
if(i<ball.length-1){
//如果是红色球,则验证每个产生的号码是否已经存在。
ball = this.validateBall(ball,i);
}else{
//如果是蓝色球,直接产生1--16之间的随机数
ball[i] = (int) Math.round(Math.random()*15+1);
}
}
//产生号码完毕,返回这注产生的号码。
return ball;
}
/**
* 每次只产生一个红色号码,并验证此号码是否已经存在,
* 如果存在,重新产生号码,只到没有重复号码。
* @param ball
* @param index 产生红色球数组的下标,即第几个号码。
* @return
*/
public int[] validateBall(int[] ball,int index){
//产生一个1--33的随机数
int random = (int) Math.round(Math.random()*32+1);
while(true){
int i=0;
for(;i<index;i++){
//如果存在重复数字
if(random==ball[i]){
//重新产生号码
random = (int) Math.round(Math.random()*32+1);
//并且跳出for循环,进入while循环
i =index+1;
}
}
//如果验证完了所有号码,那把这个号码插入数组,并返回
if(i==index){
ball[index] = random;
return ball;
}
}
}
/**
* 显示产生的双色球号码
*
*/
public void displayBall(){
System.out.println("====产生号码的详细信息如下===");
for(int[] ball:ballList){
for(int i=0;i<ball.length;i++){
//如果号码不足两位数,在前面添加"0"显示。
System.out.print(((ball[i]<10)?("0"+ball[i]):ball[i])+"\t");
}
System.out.println();
}
}
/**
* 完成初始化,制定双色球号码的
* 开始和结束区域
*
*/
public void init(){
Scanner s = new Scanner(System.in);
System.out.println("===请输入开始数字===");
this.START = s.nextInt();
System.out.println("===请输入结束数字===");
this.END = s.nextInt();
if(this.START<=25 || this.END>=150){
System.out.println("输入数字不合法,退出程序!");
System.exit(0);
}
}
/**
* 对号码进行排序,只对最后一个号码以前的
* 号码进行排序
* @param ball
* @return
*/
private int[] sort(int[] ball){
for(int i=0;i<ball.length-1;i++){
for(int j=0;j<ball.length-i-2;j++){
if(ball[j]>ball[j+1]){
int t = ball[j];
ball[j] = ball[j+1];
ball[j+1] = t;
}
}
}
return ball;
}
public static void main(String[] args){
DoubleBall ball = new DoubleBall();
ball.displayBall();
}
}
『陆』 java双色球排列组合算法 - 根据复式列出所有单式号码
你这不就是6个数字随机的排序问题么
1-6的排序打出来+2个篮球
排序:6^5^4^3^2^1 * 2 种
for循环多重嵌套。
位置变1,从上到下循环一边。
你还是自己嵌套吧,我发现如果写主代码的话也要写几十行。