
正文
九宫格java抽奖代码 九宫格抽奖设计
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
求破解九九宫格JAVA代码
JAVA不熟,不过算法都差不多。
等会给你个C/C++的。
我用C++做出来了.
基本思路说下:
先定义类
class JiuGong
{
public:
int table[9][9];//这个是九宫里的数学 不知道的用0代替
bool mark[9][9];//这个表示九宫状态,true表示已知的,可以不计算的
int x;
int y;//x,y表示当前正在试验的点
JiuGong *pre;//这是后面堆栈用的
bool check();//这函数进行九宫检查,包括行/列/小九宫的查错
bool finish();//这函数检查是否已经完成
bool find();//这函数用来找到下一个未知点(试验点)位置
}
再定义一个类 这是个堆栈
class JiuGongStack()
{
public:
JiuGong *top;
bool push(JiuGong *p);//压
bool pop(JiuGong *p);//弹
}
推算过程:
先声明一个JiuGong结构,导入初始值.
用成员函数find()找到第一个未知点.
以下循环:
{
在试验点数字加1
用成员函数finish()检查是否结束
Y- 成功 返回
N- 向下
检查数字9
Y-POP -POP失败 -题目错误 返回
N-向下
用成员函数check()查错
无错-PUSH
错-继续循环
}
完毕.
相关问答
Q1: 新手紧急求助,编一个九宫格游戏的java程序
import java.util.HashMap;
/**
* 知识点1 静态方法的调用
* 知识点2 带参数的静态方法调用
* 知识点3 for循环
* 知识点4 HashMap的遍历
* 知识点5 格式化输出
* @author Administrator
* 补充要学习的知识点
* 1.Character 和 char的区别
* 2.HashMap对象中的常用方法
*/
public class Helper {
/**
* 主方法
* 获取下面两个静态方法的值按格式打印
* @param args
*/
public static void main(String[] args) {
//调用最下面的createCharArray()方法获得的结果负值给Character数组
Character[] charArray = createCharArray();
//调用下面的countLetters(Character[] charArray)带参数方法获得结果负值给HashMap对象
HashMaplt;Character, Integer counts = countLetters(charArray);
//匹配住所有的HashMap对象
for (Character c : counts.keySet()) {
//循环格式化打印显示
System.out.printf(quot;(%c,%d)quot;, c, counts.get(c));
}
}
/**
* 验证所有含元素次数的静态方法
* @param charArray
* @return HashMaplt;Character, Integer result
*/
private static HashMaplt;Character, Integer countLetters(
Character[] charArray) {
//声明一个HashMap对象
HashMaplt;Character, Integer result = new HashMaplt;Character, Integer();
//匹配住传进来的参数charArray中所有的元素
for (Character c : charArray) {
//非空验证
if (result.get(c) == null)
//空的话把匹配住的元素放进HashMap对象中 c为键 负值为1
result.put(c, 1);
else
//已经存在把获取的值取出并且重新复制 替代掉原由的
result.put(c, result.get(c) + 1);
}
//返回给调用者
return result;
}
/**
* 随即生成100个字母的静态方法
* @return Character[]chars
*/
private static Character[] createCharArray() {
//声明一个有100个元素的Character数组
Character[] chars = new Character[100];
//循环100次
for (int i = 0; i lt; chars.length; i++) {
//随即获取一个字母负值给char对象c
char c = (char) (#39;a#39; + Math.random() * (#39;z#39; - #39;a#39; + 1));
//把随即获得的值放入Character数组
chars[i] = c;
}
//返回给调用者
return chars;
}
}
希望对你的学习有所帮助
Q2: java 写一个九宫格的代码!不用很复杂,实现了基本的功能就行! 谢谢大家!我自己写的都晕了
/*
九宫格算法代码 C++版
*/
#include stdio.h
int map[9][9] = {0, 0, 3, 8, 1, 0, 0, 0, 9,
5, 0, 0, 4, 0, 0, 0, 8, 0,
0, 6, 0, 9, 0, 0, 1, 0, 0,
0, 0, 8, 0, 3, 0, 0, 0, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 0, 0, 6, 0, 0, 5, 0, 0,
0, 0, 6, 0, 0, 9, 0, 1, 0,
0, 1, 0, 0, 0, 5, 0, 0, 4,
2, 0, 0, 0, 4, 8, 7, 0, 0};
void display()
{
int i;
int j;
for (i = 0; i 9; i++)
{
for (j = 0; j 9; j++)
{
if(map[i][j])
{
printf(" %d ", map[i][j]);
}
else
{
printf(" ");
}
}
printf("\n");
}
}
int check(int x, int y, int *mark) //check函数为该格子可以选择九宫格java抽奖代码的数字
{
int i;
int j;
int gi;
int gj;
int count = 0;
for (i = 1; i = 9; i++)
{
mark[i] = 0; //初始化
}
for (i = 0; i 9; i++)
{
mark[map[x][i]] = 1; //表示该行该数字已存在
mark[map[i][y]] = 1; //表示该列该数字已存在
}
gi = x / 3 * 3; // 九宫格把map分割成9个小块,如果该格子所在行列为(1,4),那么它所在子格子起始为(0,3)到(2,5)九宫格java抽奖代码的九个小格子
gj = y / 3 * 3;
for (i = 0; i 3; i++)
{
for (j = 0; j 3; j++)
{
mark[map[gi + i][gj + j]] = 1; //此循环为表示所在子格子九宫格java抽奖代码的九个小格子中已存在该数字
}
}
for (i = 1; i = 9; i++)
{
if(0 == mark[i]) //如果该数字不存在则++
{
count++;
}
}
return count;
}
void crack() //九宫格java抽奖代码?九宫格java抽奖代码?
{
int i;
int j;
int mark[10]; //标志数字是否已存在
int min = 10; //记录最少可能数字数
int ci = -1; //ci,cj用来记录最少可能数字的格子所在行列
int cj;
for (i = 0; i 9; i++)
{
for (j = 0; j 9; j++)
{
if (map[i][j])
{
continue; //如果该格子已有数字则跳到下一个格子
}
int c = check(i, j, mark); //c为该格子可以选择的数字
if (0 == c)
{
return;
}
if (c min)
{
ci = i;
cj = j;
min = c;
}
}
}
if (-1 == ci)
{
printf("The answer is:\n");
display();
return;
}
check(ci, cj, mark);//这个语句的作用是把mark这个数组设置成最小可能格子缺少的数字,若缺少则为0
for (i = 1; i = 9; i++)
{
if (mark[i] == 0)
{
map[ci][cj] = i; //先填入该数字
crack(); //进行判断
}
map[ci][cj] = 0; //若这个数字不可以得到解则判断下一可能数字(这里类似0-1背包问题)
}
}
int main()
{
printf("The game is:\n");
display();
crack();
return 0;
}
Q3: Java代码实现抽奖:从班级的学号中抽出一个一等奖,两个二等奖,三个三等奖
抽取问题, 重点是 同一个学号不能重复被抽取.
解决办法很多,
比如数组可以使用下标来标记,号码是否被使用,使用了就继续下一次抽取
也可以使用集合来抽取,把集合顺序打乱,然后随便抽几个就可以了
参考代码:数组法
import java.util.Random;
public class Test {
public static void main(String[] args) {
int stuNums=30;
int[] nums=new int[stuNums];//存储学号的数组
boolean[] flags=new boolean[stuNums];//标记,用于标记对应下标的学号是否已经被抽取过了
for (int i = 0; i stuNums; i++) {
nums[i]=i+1;//给学号赋值
}
Random r=new Random();
while(true){
int index = r.nextInt(stuNums);
if(!flags[index]){
System.out.println("A等:"+nums[index]);
flags[index]=true; //标记已经被使用过了
break;
}
}
for (int i = 0; i 2; i++) {
int index = r.nextInt(stuNums);
if(!flags[index]){
System.out.println("B等:"+nums[index]);
flags[index]=true;
}else{
i--;//如果已经被抽取过了 ,那么i建议,再次循环
}
}
for (int i = 0; i 3; i++) {
int index = r.nextInt(stuNums);
if(!flags[index]){
System.out.println("c等:"+nums[index]);
flags[index]=true;
}else{
i--;
}
}
}
}
集合法
import java.util.ArrayList;
import java.util.Collections;
public class Test2 {
public static void main(String[] args) {
int stuNums=20;
ArrayListInteger list=new ArrayListInteger();
for (int i = 0; i stuNums; i++) {
list.add(i+1);
}
System.out.println("有序"+list);
Collections.shuffle(list);//打乱顺序
System.out.println("乱序"+list);
System.out.println("A等"+list.get(0));
System.out.println("B等"+list.get(1));
System.out.println("B等"+list.get(2));
System.out.println("C等"+list.get(3));
System.out.println("C等"+list.get(4));
System.out.println("C等"+list.get(5));
}
}
Q4: 能不能帮我写一个模拟抽奖机的JAVA代码 1到32的八个数字
代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Luck extends JFrame implements ActionListener{
JTextField tf = new JTextField();
JButton b1 = new JButton("开始");
JButton b2 = new JButton("停止");
boolean isGo = false;
public Luck(){
b1.setActionCommand("start");
JPanel p = new JPanel();
p.add(b1);
p.add(b2);
b1.addActionListener(this);
b2.addActionListener(this);
b2.setEnabled(false);
this.getContentPane().add(tf,"North");
this.getContentPane().add(p,"South");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,200);
this.setLocation(300,300);
Cursor cu = new Cursor(Cursor.HAND_CURSOR);
this.setCursor(cu);
this.setVisible(true);
tf.setText("welcome you! ");
this.go();
}
public void go(){
while(true){
if(isGo == true){
String s = "";
for(int j = 1; j = 8;j++){
int i = (int)(Math.random() * 31) + 1;
if(i 10){
s = s + " 0" + i;
}else{
s = s + " " + i;
}
}
tf.setText(s);
}
try{
Thread.sleep(10);
}catch(java.lang.InterruptedException e){
e.printStackTrace();
}
}
}
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("start")){
isGo = true;
b1.setEnabled(false);
b2.setEnabled(true);
}else{
isGo = false;
b2.setEnabled(false);
b1.setEnabled(true);
}
}
public static void main(String[] args){
new Luck();
}
}
看下是你的要求不。若有疑问Hi我。
Q5: 谁有 九宫格抽奖的源码 注意:是可以设置抽奖概率的
你是什么用途?
a.如果抽奖内容价值比较大,得考虑到算法的安全性,保证绝对的概率,也就是能彩票一样,如果是100W的大奖,不能重复出现好几次。计算机的随机概率是不稳定的,所以需要一套完整的算法来保持概率,进行矫正和干预。 上面说道的是随机概率。
b.如果是奖池形的,就需要用维护奖池的算法来实现,比如1等奖10个 二等奖 100个 三等奖 1000个,10W的不中奖,这就形成了你的奖池,你每次抽奖是从这个池中取到一个号码,为了维护中奖率,你需要再拿走一个号码以后再给奖池补充一个新的号码。
c.总之这是一个非常复杂的过程,建议你使用国家的开奖中心的数据来维护你自己的抽奖内容,抽奖中心给的内容算法是完整的,你取到她们算出的结果当作你们计算的依据。
如果是简单实现,不考虑后果的话,你可以去前端源码下载站就能轻松找到源码
以上是我个人观点,如果错误,敬请原谅。
这个拍版好难用
关于九宫格java抽奖代码和九宫格抽奖设计的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






