導航:首頁 > 編程語言 > 數獨代碼java

數獨代碼java

發布時間:2022-09-03 19:20:58

① 用java虛擬機實現數獨計算的功能,求解決代碼成幾何倍數增加的問題!

packageknow;
publicclassT11{
publicstaticvoidmain(String[]args){
int[][]shu=shu(4);
for(inti=0;i<shu.length;i++){
for(intj=0;j<shu[i].length;j++){
System.out.print(shu[i][j]+"");
}
System.out.println();
}
}
/**
*排列規則(9)
*123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
*@parami
*/
publicstaticint[][]shu(inti){
/**
*構造數組
*/
int[][]shu=newint[i][];
for(intk=0;k<i;k++){
shu[k]=newint[i];
}
/**
*填充數字
*/
for(intk=0;k<i;k++){
intfirst=k+1;
for(intj=0;j<i;j++){
shu[k][j]=first++;
if(shu[k][j]>i){
first=1;
shu[k][j]=first++;
}
}
}
returnshu;
}
}

設計這種程序,第一是要想清楚設計思路,確定思路之後,發現邏輯很有規律,只是多次重復這個規律,對於這種情況,一般要想到的就是用for循環或遞歸這兩種解決方法

② 要用java做一個九宮格數獨,不太會做

直接用個數組存起來,他輸什麼你就存到相應位置不就行了?是需要你解還是只是填就可以了?

③ 求一個Java數獨程序

難度有點高 不過沒看清楚LZ什麼意思

④ c++或java 寫一個解3階數獨的程序

static Geocache[] createGeocaches(int a) { if(a <= 0) return new Geocache[0]; Random rand = new Random(); Geocache[] result = new Geocache[a]; for(int i = 0; i < a; i++) { //因為題目沒有描述,這里假設x, y是隨機整數,Geocache有<a href="https://www..com/s?wd=%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0&tn=44039180_cpr&fenlei=-EUBtkPWm4rjR4rHbLPWR1nH63P16L" target="_blank" class="-highlight">構造函數</a>(int, int) int x = rand.nextInt(); int y = rand.nextInt(); result[i] = new Geocache(x, y); } return result; }

⑤ 哪位大師能告訴我我編的 java 數獨解算程序 哪裡有錯誤啊謝謝!

沒看懂你的 考下來還要報錯 我自己寫了一個生成數獨的方法 表示可以用
public class ShuDu {
/** 存儲數字的數組 */
static int[][] n = new int[9][9];
/** 生成隨機數字的源數組,隨機數字從該數組中產生 */
static int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

public static void main(String[] args) {
// 生成數字
for (int i = 0; i < 9; i++) {
int time = 0; // 嘗試填充的數字次數
// 填充數字
for (int j = 0; j < 9; j++) {
// 產生數字
n[i][j] = generateNum(time);
// 如果返回值為0,則代表卡住,退回處理

// 退回處理的原則是:如果不是第一列,則先倒退到前一列,否則倒退到前一行的最後一列
if (n[i][j] == 0) {
if (j > 0) { // 不是第一列,則倒退一列
j -= 2;
continue;
} else {// 是第一列,則倒退到上一行的最後一列
i--;
j = 8;
continue;
}
}
if (isCorret(i, j)) {
// 填充成功
time = 0;// 初始化time,為下一次填充做准備
} else { // 繼續填充
time++;// 次數增加1
// 繼續填充當前格
j--;
}
}
} // 輸出結果
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.print(n[i][j] + " ");
}
System.out.println();
}
}

/**
* * 是否滿足行、列和3X3區域不重復的要求 * @param row 行號 * @param col 列號 *
*
* @return true代表符合要求
*/
public static boolean isCorret(int row, int col) {
return (checkRow(row) & checkLine(col) & checkNine(row, col));
}

/**
* * 檢查行是否符合要求 *
*
* @param row
* 檢查的行號 *
* @return true代表符合要求
*/
public static boolean checkRow(int row) {
for (int j = 0; j < 8; j++) {
if (n[row][j] == 0) {
continue;
}
for (int k = j + 1; k < 9; k++) {
if (n[row][j] == n[row][k]) {
return false;
}
}
}
return true;
}

/**
* * 檢查列是否符合要求 * @param col 檢查的列號 * @return true代表符合要求
*/
public static boolean checkLine(int col) {
for (int j = 0; j < 8; j++) {
if (n[j][col] == 0) {
continue;
}
for (int k = j + 1; k < 9; k++) {
if (n[j][col] == n[k][col]) {
return false;
}
}
}
return true;
}

/**
* 檢查3X3區域是否符合要求 *
* @param row 檢查的行號 *
* @param col 檢查的列號 *
* @return true代表符合要求
*/
public static boolean checkNine(int row, int col) {
// 獲得左上角的坐標
int j = row / 3 * 3;
int k = col / 3 * 3;
// 循環比較
for (int i = 0; i < 8; i++) {
if (n[j + i / 3][k + i % 3] == 0) {
continue;
}
for (int m = i + 1; m < 9; m++) {
if (n[j + i / 3][k + i % 3] == n[j + m / 3][k + m % 3]) {
return false;
}
}
}
return true;
}

/**
* 產生1-9之間的隨機數字 *
* 規則:生成的隨機數字放置在數組8-time下標的位置,隨著time的增加,已經嘗試過的數字將不會在取到 *
* 說明:即第一次次是從所有數字中隨機,第二次時從前八個數字中隨機,依次類推,*
* 這樣既保證隨機,也不會再重復取已經不符合要求的數字,提高程序的效率*
* * 這個規則是本演算法的核心 *
* @param time 填充的次數,0代表第一次填充 *
* @return
*/
public static int generateNum(int time) {
// 第一次嘗試時,初始化隨機數字源數組
if (time == 0) {
for (int i = 0; i < 9; i++) {
num[i] = i + 1;
}
}
// 第10次填充,表明該位置已經卡住,則返回0,由主程序處理退回
if (time == 9) {
return 0;
}
// 不是第一次填充
// 生成隨機數字,該數字是數組的下標,取數組num中該下標對應的數字為隨機數字
int ranNum = (int) (Math.random() * (9 - time));
// 把數字放置在數組倒數第time個位置,
int temp = num[8 - time];
num[8 - time] = num[ranNum];
num[ranNum] = temp; // 返回數字
return num[8 - time];

}

⑥ 用java做一個數獨游戲,有現成代碼,只需弄一下文字的東西就可以啦,不用太復雜,普普通通的就行.

public class ShuDu {
/**存儲數字的數組*/
static int[][] n = new int[9][9];
/**生成隨機數字的源數組,隨機數字從該數組中產生*/
static int[] num = {1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
//生成數字
for(int i = 0;i < 9;i++){
//嘗試填充的數字次數
int time = 0;
//填充數字
for(int j = 0;j < 9;j++){
//產生數字
n[i][j] = generateNum(time);
//如果返回值為0,則代表卡住,退回處理
//退回處理的原則是:如果不是第一列,則先倒退到前一列,否則倒退到前一行的最後一列
if(n[i][j] == 0){
//不是第一列,則倒退一列
if(j > 0){
j-=2;
continue;
}else{//是第一列,則倒退到上一行的最後一列
i--;
j = 8;
continue;
}
}
//填充成功
if(isCorret(i,j)){
//初始化time,為下一次填充做准備
time = 0;
}else{ //繼續填充
//次數增加1
time++;
//繼續填充當前格
j--;
}
}
}
//輸出結果
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
System.out.print(n[i][j] + " ");
}
System.out.println();
}
}

/**
* 是否滿足行、列和3X3區域不重復的要求
* @param row 行號
* @param col 列號
* @return true代表符合要求
*/
public static boolean isCorret(int row,int col){
return (checkRow(row) & checkLine(col) & checkNine(row,col));
}

/**
* 檢查行是否符合要求
* @param row 檢查的行號
* @return true代表符合要求
*/
public static boolean checkRow(int row){
for(int j = 0;j < 8;j++){
if(n[row][j] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[row][j] == n[row][k]){
return false;
}
}
}
return true;
}

/**
* 檢查列是否符合要求
* @param col 檢查的列號
* @return true代表符合要求
*/
public static boolean checkLine(int col){
for(int j = 0;j < 8;j++){
if(n[j][col] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[j][col] == n[k][col]){
return false;
}
}
}
return true;
}

/**
* 檢查3X3區域是否符合要求
* @param row 檢查的行號
* @param col 檢查的列號
* @return true代表符合要求
*/
public static boolean checkNine(int row,int col){
//獲得左上角的坐標
int j = row / 3 * 3;
int k = col /3 * 3;
//循環比較
for(int i = 0;i < 8;i++){
if(n[j + i/3][k + i % 3] == 0){
continue;
}
for(int m = i+ 1;m < 9;m++){
if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){
return false;
}
}
}
return true;
}

/**
* 產生1-9之間的隨機數字
* 規則:生成的隨機數字放置在數組8-time下標的位置,隨著time的增加,已經嘗試過的數字將不會在取到
* 說明:即第一次次是從所有數字中隨機,第二次時從前八個數字中隨機,依次類推,
* 這樣既保證隨機,也不會再重復取已經不符合要求的數字,提高程序的效率
* 這個規則是本演算法的核心
* @param time 填充的次數,0代表第一次填充
* @return
*/
public static int generateNum(int time){
//第一次嘗試時,初始化隨機數字源數組
if(time == 0){
for(int i = 0;i < 9;i++){
num[i] = i + 1;
}
}
//第10次填充,表明該位置已經卡住,則返回0,由主程序處理退回
if(time == 9){
return 0;
}
//不是第一次填充
//生成隨機數字,該數字是數組的下標,取數組num中該下標對應的數字為隨機數字
int ranNum = (int)(Math.random() * (9 - time));
//把數字放置在數組倒數第time個位置,
int temp = num[8 - time];
num[8 - time] = num[ranNum];
num[ranNum] = temp;
//返回數字
return num[8 - time];
}
}

在網上找的

⑦ java 數獨(性質求簡單代碼)

這只是一個找規律的題而已,找好規律了,誰都會做。

import java.util.Arrays;
import java.util.Scanner;
public class Kuaile {
public static void main(String[] args) {
System.out.println("請輸入一個>=34的數:");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
while (num < 34) {
System.out.println("數值太小了!請重輸:");
num = in.nextInt();
}
int row1[] = { 8, 11, num - 20, 1 };
int row2[] = { num - 21, 2, 7, 12 };
int row3[] = { 3, num - 18, 9, 6 };
int row4[] = { 10, 5, 4, num - 19 };
System.out.println(Arrays.toString(row1));
System.out.println(Arrays.toString(row2));
System.out.println(Arrays.toString(row3));
System.out.println(Arrays.toString(row4));
}
}

⑧ 求用java寫一個數獨游戲

public class ShuDu {
/**存儲數字的數組*/
static int[][] n = new int[9][9];
/**生成隨機數字的源數組,隨機數字從該數組中產生*/
static int[] num = {1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
//生成數字
for(int i = 0;i < 9;i++){
//嘗試填充的數字次數
int time = 0;
//填充數字
for(int j = 0;j < 9;j++){
//產生數字
n[i][j] = generateNum(time);
//如果返回值為0,則代表卡住,退回處理
//退回處理的原則是:如果不是第一列,則先倒退到前一列,否則倒退到前一行的最後一列
if(n[i][j] == 0){
//不是第一列,則倒退一列
if(j > 0){
j-=2;
continue;
}else{//是第一列,則倒退到上一行的最後一列
i--;
j = 8;
continue;
}
}
//填充成功
if(isCorret(i,j)){
//初始化time,為下一次填充做准備
time = 0;
}else{ //繼續填充
//次數增加1
time++;
//繼續填充當前格
j--;
}
}
}
//輸出結果
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
System.out.print(n[i][j] + " ");
}
System.out.println();
}
}

/**
* 是否滿足行、列和3X3區域不重復的要求
* @param row 行號
* @param col 列號
* @return true代表符合要求
*/
public static boolean isCorret(int row,int col){
return (checkRow(row) & checkLine(col) & checkNine(row,col));
}

/**
* 檢查行是否符合要求
* @param row 檢查的行號
* @return true代表符合要求
*/
public static boolean checkRow(int row){
for(int j = 0;j < 8;j++){
if(n[row][j] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[row][j] == n[row][k]){
return false;
}
}
}
return true;
}

/**
* 檢查列是否符合要求
* @param col 檢查的列號
* @return true代表符合要求
*/
public static boolean checkLine(int col){
for(int j = 0;j < 8;j++){
if(n[j][col] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[j][col] == n[k][col]){
return false;
}
}
}
return true;
}

/**
* 檢查3X3區域是否符合要求
* @param row 檢查的行號
* @param col 檢查的列號
* @return true代表符合要求
*/
public static boolean checkNine(int row,int col){
//獲得左上角的坐標
int j = row / 3 * 3;
int k = col /3 * 3;
//循環比較
for(int i = 0;i < 8;i++){
if(n[j + i/3][k + i % 3] == 0){
continue;
}
for(int m = i+ 1;m < 9;m++){
if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){
return false;
}
}
}
return true;
}

/**
* 產生1-9之間的隨機數字
* 規則:生成的隨機數字放置在數組8-time下標的位置,隨著time的增加,已經嘗試過的數字將不會在取到
* 說明:即第一次次是從所有數字中隨機,第二次時從前八個數字中隨機,依次類推,
* 這樣既保證隨機,也不會再重復取已經不符合要求的數字,提高程序的效率
* 這個規則是本演算法的核心
* @param time 填充的次數,0代表第一次填充
* @return
*/
public static int generateNum(int time){
//第一次嘗試時,初始化隨機數字源數組
if(time == 0){
for(int i = 0;i < 9;i++){
num[i] = i + 1;
}
}
//第10次填充,表明該位置已經卡住,則返回0,由主程序處理退回
if(time == 9){
return 0;
}
//不是第一次填充
//生成隨機數字,該數字是數組的下標,取數組num中該下標對應的數字為隨機數字
int ranNum = (int)(Math.random() * (9 - time));
//把數字放置在數組倒數第time個位置,
int temp = num[8 - time];
num[8 - time] = num[ranNum];
num[ranNum] = temp;
//返回數字
return num[8 - time];
}
}

⑨ 求破解九九宮格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
錯->繼續循環
}

完畢.

⑩ java高手進,求一個數獨游戲java代碼

public class ShuDu {
/**存儲數字的數組*/
static int[][] n = new int[9][9];
/**生成隨機數字的源數組,隨機數字從該數組中產生*/
static int[] num = {1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
//生成數字
for(int i = 0;i < 9;i++){
//嘗試填充的數字次數
int time = 0;
//填充數字
for(int j = 0;j < 9;j++){
//產生數字
n[i][j] = generateNum(time);
//如果返回值為0,則代表卡住,退回處理
//退回處理的原則是:如果不是第一列,則先倒退到前一列,否則倒退到前一行的最後一列
if(n[i][j] == 0){
//不是第一列,則倒退一列
if(j > 0){
j-=2;
continue;
}else{//是第一列,則倒退到上一行的最後一列
i--;
j = 8;
continue;
}
}
//填充成功
if(isCorret(i,j)){
//初始化time,為下一次填充做准備
time = 0;
}else{ //繼續填充
//次數增加1
time++;
//繼續填充當前格
j--;
}
}
}
//輸出結果
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
System.out.print(n[i][j] + " ");
}
System.out.println();
}
}

/**
* 是否滿足行、列和3X3區域不重復的要求
* @param row 行號
* @param col 列號
* @return true代表符合要求
*/
public static boolean isCorret(int row,int col){
return (checkRow(row) & checkLine(col) & checkNine(row,col));
}

/**
* 檢查行是否符合要求
* @param row 檢查的行號
* @return true代表符合要求
*/
public static boolean checkRow(int row){
for(int j = 0;j < 8;j++){
if(n[row][j] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[row][j] == n[row][k]){
return false;
}
}
}
return true;
}

/**
* 檢查列是否符合要求
* @param col 檢查的列號
* @return true代表符合要求
*/
public static boolean checkLine(int col){
for(int j = 0;j < 8;j++){
if(n[j][col] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[j][col] == n[k][col]){
return false;
}
}
}
return true;
}

/**
* 檢查3X3區域是否符合要求
* @param row 檢查的行號
* @param col 檢查的列號
* @return true代表符合要求
*/
public static boolean checkNine(int row,int col){
//獲得左上角的坐標
int j = row / 3 * 3;
int k = col /3 * 3;
//循環比較
for(int i = 0;i < 8;i++){
if(n[j + i/3][k + i % 3] == 0){
continue;
}
for(int m = i+ 1;m < 9;m++){
if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){
return false;
}
}
}
return true;
}

/**
* 產生1-9之間的隨機數字
* 規則:生成的隨機數字放置在數組8-time下標的位置,隨著time的增加,已經嘗試過的數字將不會在取到
* 說明:即第一次次是從所有數字中隨機,第二次時從前八個數字中隨機,依次類推,
* 這樣既保證隨機,也不會再重復取已經不符合要求的數字,提高程序的效率
* 這個規則是本演算法的核心
* @param time 填充的次數,0代表第一次填充
* @return
*/
public static int generateNum(int time){
//第一次嘗試時,初始化隨機數字源數組
if(time == 0){
for(int i = 0;i < 9;i++){
num[i] = i + 1;
}
}
//第10次填充,表明該位置已經卡住,則返回0,由主程序處理退回
if(time == 9){
return 0;
}
//不是第一次填充
//生成隨機數字,該數字是數組的下標,取數組num中該下標對應的數字為隨機數字
int ranNum = (int)(Math.random() * (9 - time));
//把數字放置在數組倒數第time個位置,
int temp = num[8 - time];
num[8 - time] = num[ranNum];
num[ranNum] = temp;
//返回數字
return num[8 - time];
}
}
這是控制台程序 - -你看著學習著改改~

閱讀全文

與數獨代碼java相關的資料

熱點內容
海南壓縮機在哪裡 瀏覽:487
電腦文件夾清晰的文件結構 瀏覽:837
如何把蘋果手機的app轉到安卓 瀏覽:303
java同步並發 瀏覽:249
fw壓縮圖片 瀏覽:256
淘寶申請源碼靠譜嗎 瀏覽:872
androidupdater 瀏覽:635
c2d游戲源碼大全可復製版 瀏覽:771
電腦怎樣重置網關命令 瀏覽:411
winftplinux 瀏覽:335
推特app界面如何設置成中文 瀏覽:452
太空工程師轉子編程屬性 瀏覽:32
windowscmd關機命令 瀏覽:342
雲桌面只要伺服器裝一套軟體 瀏覽:247
電腦右鍵按到什麼導致文件夾全屏 瀏覽:454
我的世界如何製造伺服器主城 瀏覽:365
linuxssh連不上 瀏覽:297
永宏plc用什麼編程電纜 瀏覽:371
win激活命令行 瀏覽:886
新手學電腦編程語言 瀏覽:893