關於二維數組與一維數組的關系及問題


出自藍橋杯:  算法提高 9-1九宮格  
時間限制:1.0s   內存限制:256.0MB
 
問題描述
九宮格。輸入1-9這9個數字的一種任意排序,構成3*3二維數組。如果每行、每列以及對角線之和都相等,打印1。否則打印0。
樣例輸出
與上面的樣例輸入對應的輸出。
例:
數據規模和約定
輸入1-9這9個數字的一種任意排序。
 
一個關於二維數組與一維數組介紹的網址:
http://blog.csdn.net/gideal_wang/article/details/3647837
 
我們知道二維數組可以用一維數組進行表示和求解,因為二維數組內存的排列也是線性的。所以用線性的一維來訪問也沒有問題。
當我們構造一維數組來表示二維數組的時候,也許在內存空間上並沒有特別大的改變,但時間復雜度能從兩個循環的時間復雜度減少為一個循環的時間復雜度
二維數組用一維數組來進行表示,主要其根本就是用一維數組的下標去表示二維數組的下標
方法:一維數組的每個元素下標除以列數                                  為這個元素對應在二維數組的行下標
           一維數組的每個元素下標求余列數                                  為這個元素對應在二維數組的列下標
這樣便能用一維表示任意的二維
 

import java.util.Scanner;

public class Main {
//  九宮格。輸入1-9這9個數字的一種任意排序,構成3*3二維數組。
// 如果每行、每列以及對角線之和都相等,打印1。否則打印0。
public static void main(String[] args) {
int r1_sum=0;
int r2_sum=0;
int r3_sum=0;
int c1_sum=0;
int c2_sum=0;
int c3_sum=0;
int lz_sum=0;
int lf_sum=0;
Scanner in=new Scanner(System.in);
int []array=new int[9];
for(int i=0;i<9;i++){
int n=in.nextInt();
array[i]=n;
}
// 用一個一維數組表示二維數組:就是把二維數組的坐標表示為一維
//一維數組的每個元素下標除以列數為這個元素對應在二維數組的行下標
//一維數組的每個元素下標求余列數為這個元素對應在二維數組的列下標
for(int i=0;i<array.length;i++){
if((i/3==0)){
r1_sum+=array[i];
}else if(i/3==1){
r2_sum+=array[i];
}else if(i/3==2){
r3_sum+=array[i];
}


if(i%3==0){
c1_sum+=array[i];
}else if(i%3==1){
c2_sum+=array[i];
}else if(i%3==2){
c3_sum+=array[i];
}

if((i/3==0)&&(i%3==0)){
lz_sum+=array[i];
}else if((i/3==1)&&(i%3==1)){
lz_sum+=array[i];
}else if((i/3==2)&&(i%3==2)){
lz_sum+=array[i];
}
if((i/3==0)&&(i%3==2)){
lf_sum+=array[i];
}else if((i/3==1)&&(i%3==1)){
lf_sum+=array[i];
}else if((i/3==2)&&(i%3==0)){
lf_sum+=array[i];
}
}
if((r1_sum==r2_sum)&&(r2_sum==r3_sum)&&(r3_sum==c1_sum)&&(c1_sum==c2_sum)&&(c2_sum==c3_sum)&&(c3_sum==lz_sum)&&(lz_sum==lf_sum)){
System.out.println(1);
}
else{
System.out.println(0);
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM