打印N*N旋转矩阵 的一个解法
2011-04-03 13:33
155 查看
如 输入 4
打印
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
void printNN(int N)
{
if(N <= 0) return;
if(N == 1) return;
int *p = new int[N*N];
int i = 0, j = 0;
int cnt = 1;
int m = N;
while(m>=(N+1)/2)
{
while(j<m)
p[i*N+j++] = cnt++;
j--;
while(++i<m)
p[i*N+j] = cnt++;
i--;
while(--j>=(N-m))
p[i*N+j] = cnt++;
j++;
while(--i>(N-m))
p[i*N+j] = cnt++;
i++;j++;
m--;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%2d ", p[i*N+j]);
printf("/n");
}
delete []p;
}
打印
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
void printNN(int N)
{
if(N <= 0) return;
if(N == 1) return;
int *p = new int[N*N];
int i = 0, j = 0;
int cnt = 1;
int m = N;
while(m>=(N+1)/2)
{
while(j<m)
p[i*N+j++] = cnt++;
j--;
while(++i<m)
p[i*N+j] = cnt++;
i--;
while(--j>=(N-m))
p[i*N+j] = cnt++;
j++;
while(--i>(N-m))
p[i*N+j] = cnt++;
i++;j++;
m--;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%2d ", p[i*N+j]);
printf("/n");
}
delete []p;
}
相关文章推荐
- 打印有重复数字的数列的 一个递归解法
- 【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位 数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次 方+5的三次方+3的三次方。
- 最长公共子序列,子串(打印一个、打印多个)
- 3.8 编写一个程序打印如图 3.1 所示的 n 阶杨辉三角形,其中 n 由用户输入,该值不 能大于 13。
- 一个打印数据的方法--file_put_contents
- 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。
- 倒序打印一个单链表
- 打印一个九九乘法表
- 一个打印输入字符串所有排列的递归程序
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
- 把一个int()或者byte(字节)以二进制的形式打印出来
- 一个打印有规律图形的c程序。
- 求一个数的二进制中有多少个1的两种解法
- 360笔试---将一个数拆分成若干个素数的乘积并打印
- 给定一个整数,打印该整数的英文描述(例如“One Thousand,Two Hundred Thirty Four”)。
- 找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息。
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 考虑一个路由器连接了三个子网--给出前缀要求网络地址的解法
- 打印一个楼梯(Staircase)