將你其中某些問題的答案放在代碼注釋中了.

創新互聯建站自2013年創立以來,先為綏德等服務建站,綏德等地企業,進行企業商務咨詢服務。為綏德企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
這個程序輸出的是固定的九宮格,我想,是根據固有的九宮格中的數字與數組下標的關系來寫的代碼。
希望對你有所幫助,加油!
class?S{
public?static?void?main(String[]?args)?{?
int?arr[][]?=?new?int[3][3];?
//創建一個三階方陣??
int?a?=?2;????????
//第3行的行下標
//???這里是什么意思,2從何而來
//A:java中數組的下標從0開始
int?b?=?3/2;????
//第2列的列下標
//???同上?
//A:這里由于b=1,(int)/(int),java中數組的下標從0開始
for(int?i=1;i=9;i++){??
//給數組賦值???
arr[a++][b++]?=?i;??
if(i%3==0){?????
//如果i是3的倍數——————???為什么要判斷是不是3的倍數?
a?=?a-2;
//————————————————???if...else里面的語句是什么意思,作用是什么???
b?=?b-1;//————————————————???同上??
}
//使a,b回到起點:a=2,b=1;
else{???????
//如果i不是3的倍數//————————————————???同上????
a?=?a%3;???
b?=?b%3;???
}??
}
//????九宮格的每一行、每一列、對角線都等于15,
//???但是這里連一個15這個數字都沒有出現,但還是成功輸出
//————————————————————???他是怎么做到的?
System.out.println("輸出九宮格:");???
//遍歷輸出九宮格??
for(int?i=0;i3;i++){?
for(int?j=0;j3;j++){??
System.out.print(arr[i][j]+"??");?
}
System.out.print("\n");//從你的程序中將此語句上移到此位置?
}
}
}
/*
九宮格算法代碼 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函數為該格子可以選擇的數字
{
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)的九個小格子
gj = y / 3 * 3;
for (i = 0; i 3; i++)
{
for (j = 0; j 3; j++)
{
mark[map[gi + i][gj + j]] = 1; //此循環為表示所在子格子的九個小格子中已存在該數字
}
}
for (i = 1; i = 9; i++)
{
if(0 == mark[i]) //如果該數字不存在則++
{
count++;
}
}
return count;
}
void crack() //??
{
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;
}
/*直接復制運行就可以,每一行的九個數字代表一個九宮格的9個數字,從左到右,從上到下*/
import?java.util.ArrayList;
import?java.util.Arrays;
public?class?Test1?{
private?static?ArrayListString?arrangeList?=?new?ArrayListString();?
?public?static?void?main(String[]?args)?{
String?str?=?"123456789";//你要排列組合的字符串
char?list[]?=?str.toCharArray();//將字符串轉換為字符數組
genernateData(list,?0,?list.length?-?1);//參數為字符數組和0和字符數組最大下標
int?arr[]=new?int[9];
for(String?str1?:?arrangeList){
for(int?k=0;k9;k++){
arr[k]=Integer.parseInt(str1.substring(k,k+1));
}
if(arr[0]+arr[1]+arr[2]==15arr[3]+arr[4]+arr[5]==15arr[6]+arr[7]+arr[8]==15arr[0]+arr[3]+arr[6]==15arr[1]+arr[4]+arr[7]==15arr[2]+arr[5]+arr[8]==15arr[0]+arr[4]+arr[8]==15arr[2]+arr[4]+arr[6]==15){
System.out.println(Arrays.toString(arr));
}
}
}
?
public?static?void?genernateData(char?list[],?int?k,?int?m)?{
?if?(k??m)?{
?StringBuffer?sb?=?new?StringBuffer();//創建一個StringBuffer對象sb
?for?(int?i?=?0;?i?=?m;?i++)?{
?sb.append(list[i]);//循環將字符數組值追加到StringBuffer中
?}
?arrangeList.add(sb.toString());
?}?else?{
?for?(int?i?=?k;?i?=?m;?i++)?{
?swapData(list,?k,?i);//將下表為k和i的值調換位置
?genernateData(list,?k?+?1,?m);
?swapData(list,?k,?i);
?}
?}
}
private?static?void?swapData(char?list[],?int?k,?int?i)?{
char?temp?=?list[k];
list[k]?=?list[i];
list[i]?=?temp;
}
}
標題名稱:java九宮格代碼 九宮格代碼實現
本文網址:http://www.yijiale78.com/article8/hhchip.html
成都網站建設公司_創新互聯,為您提供網站設計、企業網站制作、外貿網站建設、標簽優化、、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯