欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

填幻方的Java代碼,Java幻方

請(qǐng)問這道求幻方的JAVA題怎么改?

給你個(gè)例子:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了沙依巴克免費(fèi)建站歡迎大家使用!

public class mofang1 {

public static void main(String args[]) {

int j = 3;

int a[][] = new int[j][j];

for (int b = 0; b j; b++) {

for (int d = 0; d j; d++) {

a[b][d] = 0;

}

}

int r = 0;

int c = j / 2;

for (int i = 1; i = j * j; i++) {

a[r][c] = i;

System.out.println("r:" + r + " C:" + c);

r = r - 1;

c = c + 1;

if (r 0)

r = j - 1;

if (c j -1)

c = 0;

if (a[r][c] != 0) {

c = c - 1;

r = r + 2;

if (r 0) {

r = j - 1;

} else if (r j - 1) {

r = r - j;

}

if (c j -1) {

c = c - j;

} else if (c 0) {

c = j - 1;

}

}

}

for (int e = 0; e j; e++) {

for (int f = 0; f j; f++) {

if (a[e][f] 10)

System.out.print(a[e][f] + " ");

else

System.out.print(a[e][f] + " ");

if (f == j - 1)

System.out.println("\n");

}

}

}

}

用JAVA編寫幻方陣

最笨的方法就是 窮舉。。。

好像有個(gè)什么口訣》》》

1居上行正中央,仿次斜填莫相忘,上出框時(shí)往下填,

右出框時(shí)左邊放,排重便在下格填,右上排重一個(gè)樣。

那就 一直 for 循環(huán)啊

代碼自己寫吧 一個(gè)for 里面 一個(gè)判斷

Java數(shù)獨(dú)游戲代碼

public class ShuDu {

/**存儲(chǔ)數(shù)字的數(shù)組*/

static int[][] n = new int[9][9];

/**生成隨機(jī)數(shù)字的源數(shù)組,隨機(jī)數(shù)字從該數(shù)組中產(chǎn)生*/

static int[] num = {1,2,3,4,5,6,7,8,9};

public static void main(String[] args) {

//生成數(shù)字

for(int i = 0;i 9;i++){

//嘗試填充的數(shù)字次數(shù)

int time = 0;

//填充數(shù)字

for(int j = 0;j 9;j++){

//產(chǎn)生數(shù)字

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,為下一次填充做準(zhǔn)備

time = 0;

}else{ //繼續(xù)填充

//次數(shù)增加1

time++;

//繼續(xù)填充當(dāng)前格

j--;

}

}

}

//輸出結(jié)果

for(int i = 0;i 9;i++){

for(int j = 0;j 9;j++){

System.out.print(n[i][j] + " ");

}

System.out.println();

}

}

/**

* 是否滿足行、列和3X3區(qū)域不重復(fù)的要求

* @param row 行號(hào)

* @param col 列號(hào)

* @return true代表符合要求

*/

public static boolean isCorret(int row,int col){

return (checkRow(row) checkLine(col) checkNine(row,col));

}

/**

* 檢查行是否符合要求

* @param row 檢查的行號(hào)

* @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 檢查的列號(hào)

* @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區(qū)域是否符合要求

* @param row 檢查的行號(hào)

* @param col 檢查的列號(hào)

* @return true代表符合要求

*/

public static boolean checkNine(int row,int col){

//獲得左上角的坐標(biāo)

int j = row / 3 * 3;

int k = col /3 * 3;

//循環(huán)比較

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;

}

/**

* 產(chǎn)生1-9之間的隨機(jī)數(shù)字

* 規(guī)則:生成的隨機(jī)數(shù)字放置在數(shù)組8-time下標(biāo)的位置,隨著time的增加,已經(jīng)嘗試過的數(shù)字將不會(huì)在取到

* 說明:即第一次次是從所有數(shù)字中隨機(jī),第二次時(shí)從前八個(gè)數(shù)字中隨機(jī),依次類推,

* 這樣既保證隨機(jī),也不會(huì)再重復(fù)取已經(jīng)不符合要求的數(shù)字,提高程序的效率

* 這個(gè)規(guī)則是本算法的核心

* @param time 填充的次數(shù),0代表第一次填充

* @return

*/

public static int generateNum(int time){

//第一次嘗試時(shí),初始化隨機(jī)數(shù)字源數(shù)組

if(time == 0){

for(int i = 0;i 9;i++){

num[i] = i + 1;

}

}

//第10次填充,表明該位置已經(jīng)卡住,則返回0,由主程序處理退回

if(time == 9){

return 0;

}

//不是第一次填充

//生成隨機(jī)數(shù)字,該數(shù)字是數(shù)組的下標(biāo),取數(shù)組num中該下標(biāo)對(duì)應(yīng)的數(shù)字為隨機(jī)數(shù)字

int ranNum = (int)(Math.random() * (9 - time));

//把數(shù)字放置在數(shù)組倒數(shù)第time個(gè)位置,

int temp = num[8 - time];

num[8 - time] = num[ranNum];

num[ranNum] = temp;

//返回?cái)?shù)字

return num[8 - time];

}

}

求助 關(guān)于java中幻方的問題

、4M階幻方和4M + 2階幻方,其中M為自然數(shù),2階幻方不存在。幻方構(gòu)造法主要有:連續(xù)擺數(shù)法、階梯法(樓梯法)、奇偶數(shù)分開的菱形法、對(duì)稱法、對(duì)角線法、比例放大法、斯特雷奇法、LUX法、拉伊爾法(基方、根方合成法)、鑲邊法、相乘法、幻方模式等。

奇數(shù)階幻方構(gòu)造法

Siamese方法(Kraitchik 1942年,pp. 148-149)是構(gòu)造奇數(shù)階幻方的一種方法,說明如下:

把1放置在第一行的中間。

順序?qū)⒌葦?shù)放在右上方格中。

當(dāng)右上方格出界的時(shí)候,則由另一邊進(jìn)入。

當(dāng)右上方格中已經(jīng)填有數(shù),則把數(shù)填入正下方的方格中。

按照以上步驟直到填寫完所有N2個(gè)方格。

(由于幻方的對(duì)稱性,也可以把右上改為右下、左上以及左下等方位)

以5階幻方為例,1填寫在(1,3)(第一行第三列)的位置上;2應(yīng)當(dāng)填寫在其右上方格即(0,4)中,由于(0,4)超出頂邊界,所以從最底行進(jìn)入,即(5,4);3填寫在(5,4)的右上方格(4,5)中;4填寫在(4,5)的右上方格(3,6)中,由于(3,6)超出右邊界,所以從最左列進(jìn)入,即(3,1);5填寫在(3,1)的右上方格(2,2)中;6應(yīng)該填寫的方格(1,3)已經(jīng)被1所占據(jù),因此填寫在(2,2)的正下方格(3,2)中;按照上面的步驟直到所有數(shù)填入。

偶數(shù)階幻方構(gòu)造法

4M階幻方構(gòu)造法

對(duì)于4M階幻方一般都用對(duì)調(diào)法,制作起來很容易。如4階幻方的排列法:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

按如上圖排列好,再將非主副對(duì)角線上的各個(gè)數(shù)關(guān)于中心對(duì)調(diào),即成下圖:

1 15 14 4

12 6 7 9

8 10 11 5

13 3 2 16

4M+2階幻方的求解方法

加邊法

以6階為例子,先排出4階的幻方,如上圖,再將圖中每一個(gè)數(shù)都加上8m + 2 = 10

11 25 24 14

22 16 17 19

18 20 21 15

23 13 12 26

在外圍加上一圈格子,把和這些數(shù)安排在外圈格子內(nèi),把1到8M+2和4m*4m+8m+3到(4m+2)*(4m+2)安排到外圈格子內(nèi),但要使相對(duì)兩數(shù)之和等于16m(m + 1) + 5。

有了這些公式算法,我們就可以用程序語言來實(shí)現(xiàn)它了

首先,這是一個(gè)十階的幻方也就是說我們要用4M+2階幻方的模式來實(shí)現(xiàn)他,其中M=2;

并且要先求出4*2也就是8階幻方,在把

下面是我編的C語言算法:

#include "stdio.h"

void mian()

{

int arr[10][10];

int no=1;

for(int i=1;i9;i++)

{

for(int j=1;j9;j++)

{

arr[i][j]=no;

no++;

}

}

for(int i=1;i5;i++)

{

for(int j=1;j9;j++)

{

if(i=j||i=(9-j))

contine;

else

{

int need=0;

need=arr[i][j];

arr[i][j]=arry[9-i][9-j];

arry[9-i][9-j]=need;

}

}

}

for(int i=1;i9;i++)

{

for(int j=1;j9;j++)

{

arr[i][j]=arr[i][j]+18;

}

}

int a[18],b[18];

int q=1,w=83;

for(int i=0;i18;i++)

{

a[i]=q;

b[i]=w;

q++;

w++;

}

for(int i=1;i9;i++)

{

for(int j=1;j9;j++)

{

if(j=8)

printf("%d\n",arr[i][j]);

else

printf("%d",arr[i][j])

}

}

for(int i=0;i18;i++)

{

printf("%d\n",a[i]);

printf("%d\n",b[i]);

}

}

因?yàn)槲覜]有C編譯器,所以我就只有這樣把沒檢驗(yàn)過的代碼給你了,我說明一下,我這個(gè)編譯的是8*8的二維數(shù)組的幻方,公式也給你了,也許答案和你的不一樣,但是絕對(duì)是正確的,樓主可以驗(yàn)算,至于為什么我沒有加上其他二方,那是因?yàn)槲視簳r(shí)還沒有想到有更優(yōu)化的方法來實(shí)現(xiàn)4M+2種類的幻方方法,只能把他剩下的二方數(shù)字輸出來,讓別人自己填,我也就能做到這樣了,打了大半天,雖說不完美,但是也只有將就了

另外,虛機(jī)團(tuán)上產(chǎn)品團(tuán)購,超級(jí)便宜

當(dāng)前文章:填幻方的Java代碼,Java幻方
當(dāng)前地址:http://chinadenli.net/article13/dsshods.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)外貿(mào)網(wǎng)站建設(shè)建站公司移動(dòng)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名