藍橋杯基礎練習(回形取數)

基礎練習 回形取數  

時間限制:1.0s   內存限制:512.0MB

問題描述

  回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。

輸入格式

  輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。

輸出格式

  輸出只有一行,共mn個數,爲輸入矩陣回形取數得到的結果。數之間用一個空格分隔,行末不要有多餘的空格。

樣例輸入

3 3
 1 2 3
 4 5 6
 7 8 9

樣例輸出

1 4 7 8 9 6 3 2 5

樣例輸入

3 2
 1 2
 3 4
 5 6

樣例輸出

1 3 5 6 4 2

思想:這題學習的是蛇形數的輸出。思路:將四周全部置爲標識符,遇到邊緣後停止並向下一個方向前進。

public class _3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int m;int n;
		Scanner sc = new Scanner(System.in);
		m = sc.nextInt();
		n = sc.nextInt();
		int[][] array = new int[m][n];  //定義數組的方式
		for(int i=0;i<m;i++) {
			for(int j=0;j<n;j++) {
			array[i][j] = sc.nextInt();
			}
		}
		printArray(m,n,array);
	}

	public static void printArray(int m,int n,int array[][]) {
		int mark = 0;
		int sum = (m>n?n:m)/2;
		while(mark<=sum) {
			for(int i = mark;i<m-mark;i++)  { //第一列  列固定行變化
				if(array[i][mark] != -1) {
					System.out.print(array[i][mark] + " ");
					array[i][mark] = -1;
				}
			}
			for(int i= mark+1;i<n-mark;i++) {   //最後一行  行固定,列變化
				if(array[m-mark-1][i] != -1) {
					System.out.print(array[m-mark-1][i] + " ");
					array[m-mark-1][i] = -1;
				}
			}
			for(int i = m-mark-1;i>=mark;i--) {    //循環到最後一列
				if(array[i][n-mark-1] != -1) {
					System.out.print(array[i][n-mark-1]+" ");
					array[i][n-mark-1] = -1;
				}
			}
			for(int i = n-mark-2;i>=mark;i--) {  //循環回到第一行
				if(array[mark][i] != -1) {
					System.out.print(array[mark][i] +" ");
					array[mark][i] = -1;
				}
			}
			mark++;	
		}
	}
}

運行結果:
3 3
1 2 3 
4 5 6
7 8 9
1 4 7 8 9 6 3 2 5 
題目:搜索插入位置
給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。

你可以假設數組中無重複元素。

示例 1:

輸入: [1,3,5,6], 5
輸出: 2
示例 2:

輸入: [1,3,5,6], 2
輸出: 1
示例 3:

輸入: [1,3,5,6], 7
輸出: 4
示例 4:

輸入: [1,3,5,6], 0
輸出: 0

代碼:
public int searchInsert(int[] nums, int target) {
        int len = nums.length,i,j;
        if(target > nums[len-1]) {
            return len;
        }
        for(i=0;i<len;i++)
            if(nums[i] >= target)
                break;
        return i;
    }
困惑:題目不是說把值寫入數組中嗎,怎麼寫,自己寫的總是會報錯,越界
public int searchInsert(int[] nums, int target) {
        int len = nums.length,i,j;
        if(target > nums[len-1]) {
            nums[len] = target;
            return len;
        }
        for(i=len-1;i>0;i--){
            nums[i+1] = nums[i];
            if(nums[i+1] <=target) 
                break;
        }
        return i;
    }

時間:2018.12.11

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章