在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。public static void main(String [] args){ int value = 5 ...
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
*基於題目整體思路(題目相關擴展思路):
1.構造滿足條件的二維數組
2.遍歷檢查構造的數組是否正確
3.去二維數組中查找是否存在該整數。
*本題目的準確解法
public static void main(String [] args){
int value = 560;
int times = 0;
int n = 10;
int arry[][] = new int[n][n];
//隨機生成滿足條件的二維數組
for(int i = 0;i<arry.length;i++){
for(int j=0;j<arry[i].length;j++){
if(j==0) {
if(i == 0) {
//初始化arry[0][0]
arry[i][j] = (int) (Math.random() * 100) + 1;
}else{
//rowgap標識行的隨機生成的差值
int rowgap = (int)(Math.random()*100)+1;
arry[i][j] = arry[i-1][j]+rowgap;
}
}else{
if(i ==0){
//columgap標識列的隨機生成的差值
int columgap = (int)(Math.random()*100)+1;
arry[i][j] = arry[i][j-1]+columgap;
}else{
int rowcolgap = (int)(Math.random()*100)+1;
//判斷arry[i-1][j] arry[i][j-1],選取較大的+差值生成新的整數
if(arry[i-1][j]<arry[i][j-1]){
arry[i][j] = arry[i][j-1]+rowcolgap;
}else{
arry[i][j] = arry[i-1][j]+rowcolgap;
}
}
}
}
}
//遍歷輸出數組 檢驗數組是否構造正確
for( int i = 0 ;i<arry.length;i++){
for(int j = 0;j<arry[i].length;j++){
if(j<n-1){
System.out.print(arry[i][j]+" ");
}else{
System.out.println(arry[i][j]);
}
}
}
//遍歷查找二維數組中是否存在該值
int row = arry.length -1 ;
int colum = 0;
//flag 標識數組中是否存在該值
int flag = 0;
for (int k = row;k>=0; k --){
for(int b = colum ;b<arry.length; b ++){
if(value == (arry[row][colum])){
times =times +1;
flag = 1;
break;
}else if(value>(arry[row][colum])){
times = times + 1;
colum =colum + 1;
}else{
times = times + 1;
row = row -1;
break;
}
}
if(flag==1) {
System.out.print("Exist the value of " + value + "查找了" + times+"次。");
break;
}else if(k==0){
//當arry[][]第一行遍歷結束,並且沒有發現該值時,輸出查找結果
System.out.print("Not exist the value of "+value+"查找了"+times+"次");
}
}
}
//*本題目的準確解法: