输出顺时针旋转的数组

题目描述:给出一个正整数N,按照如下序列输出一个N*N的数组。

1  2  3  4  5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

  分析:与前面做的一个题目有些类似。先找出数组更新的规律,每次分为右、下左、上四个方向。一共需要旋转N/2圈,如果N是奇数的话,则会存在一个中间位置的元素,另外复制即可。代码如下:

     int[][] getClockwiseMatrix(int n) {
		int[][] res = new int[n][n];
		int m = 1;
		for(int i=0; i<n/2; i++) {
			//right
			for(int j=i; j<n-i; j++) {
				if(0 == res[i][j])
					res[i][j] = m++;
			}
			//down
			for(int j=i+1; j<n-i; j++) {
				if(0 == res[j][n-i-1])
					res[j][n-i-1] = m++;
			}
			//left
			for(int j=n-i-1; j>i; j--) {
				if(0 == res[n-i-1][j])
					res[n-i-1][j] = m++;
			}
			//up
			for(int j=n-i-1; j>i; j--) {
				if(0 == res[j][i])
					res[j][i] = m++;
			}
		}
		if(1 == n % 2)
			res[n/2][n/2] = m;
		return res;
	}

  

时间: 2024-08-15 01:15:07

输出顺时针旋转的数组的相关文章

2016-1-9作业——输出二维数组的和

1 int [][] array2 = {{1,2,3,4},{5,6,7,8}};//第二种方式创建并初始化数组 2 3 //输出数组中所有元素的和 4 int sum = 0; 5 6 for(int i = 0;i<array2.length;i++){ //利用for循环输出 7 8 for(int j = 0;j<array2[i].length;j++){ 9 10 System.out.print(array2[i][j]+" ");//输出二维数组中的元素

编程题:结构体数组的引用。功能:输出结构体数组各元素的成员值

编程题:结构体数组的引用.功能:输出结构体数组各元素的成员值 #include<stdio.h> void main() { struct person { char name[20]; char sex; int age; float height; }per[3]={{"Li Ping",'M',20,175},{"Wang Ling",'F',19,162.5}, {"Zhao Hui",'M',20,178}}; int i;

php foreach输出二维数组

/* *标题:foreach输出二维数组 *函数:foreach() *创建时间:2015年5月16日 *注意事项: */ //输出一维数组 $array1 = array(); $array1[0] = '楚留香'; $array1[1] = '胡铁花'; $array1[2] = '姬冰燕'; //只有value的情况,也就是只输出值. foreach ($array1 as $value) { echo $value.' '; } echo '<p>'; //输出键值对 foreach

输出一维环形数组中最大子数组和最大子数组的位置

组员 石鹤李海超 一.题目 输出一维环形数组中最大子数组的和 和最大子数组的位置 二.设计思想 把原数组扩大一倍,再把原数组放到后边,只需改变上次试验是循环变量即可求出最大子数组的和. 三.源代码 #include<iostream.h> #include<time.h> #include<stdlib.h> int main() { int arry[20]; int start,end,i; long sum,max; cout<<"Pleas

输出二维数组所有元素的和

1 //二维数组,初始化,写出各元素 2 3 int[][] n={{12,0},{3,5,11},{2,5,7,8}}; 4 int sum1 = 0; 5 System.out.println("输出一个二维数组:"); 6 //二维数组的遍历输出,foreach写法,依然有两个for 7 for(int[] m:n) 8 { 9 for(int g:m) 10 { 11 System.out.print(g+" "); 12 sum1 += g; 13 } 1

二维数组的输出--(指针输出 和 指针数组输出)

当我第一次看见数组指针和指针数组这两个名字的时候,我以为是一个东西呢,当看到英文解释就知道这两个是不一样的了. 指针数组:array of pointers,用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,指向数组的指针,数组可以是任意维的 下面举例说明: int a[3][4]   --->这个无需多说,就是一个二维数组. int (*p)[4]   --->就相当于int p[][4],它是一个二维数组的指针,可以指向一个第二维度为4的二维

04PHP基础-常量定义输出 04PHP基础-数组定义及使用

一.常量的定义   常量默认是区分大小写,如果define('AA',20,true)表示不区分大小写,产量名一般用大写 bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )  ?常量名必须使用''或者""引起来,因为他是字符串类型 常量声明和判断时必须使用"" ''   输出时可以直接使用常量名 常量的值是不能修改的,一次定义永久使用 1.define('AA

ThinkPHP 模板 Volist 标签嵌套循环输出多维数组

ThinkPHP 中对 volist 标签嵌套使用可实现多维数组的输出. volist 嵌套使用 一般的二维数组,可以用 volist 标签直接循环输出.对于多维数组,则需要对其中的数组成员再次使用 volist 标签嵌套循环输出. 构建一个多维数组: $food = array(); $food[0]['fruits'][0]['fruits1'] = '苹果1'; $food[0]['fruits'][0]['fruits2'] = '桔子1'; $food[0]['fruits'][0][

C语言编程 子函数中利用指针输出二维数组

一般输出方式:void print1(int arr[][3], int row, int col){int i, j;for (i = 0; i < row; i++){for (j = 0; j < col; j++){printf("%d", arr[i][j]);}printf("\n");}} 指针输出方式:void print2(int arr, int row, int col){int i, j;for (i = 0; i < ro