打印NxN的矩阵

找出规律,并打印出一个NxN的矩阵,规律就是从首坐标开始顺时针依次增大:

 1 #include<iostream>
 2 #include<vector>
 3
 4 using namespace std;
 5
 6 int main(void)
 7 {
 8
 9     int N;
10     cout << "Input a num:" << endl;
11     cin >> N;
12     while (N < 0)
13     {
14         cout << "invalid input!!!" << endl;
15         cout << "input again!!!" << endl;
16         cin >> N;
17     }
18     if (N == 0)
19     {
20         cout << 0;
21         return 0;
22     }
23
24     vector<vector<int> > p(N);
25     for (int i = 0; i < N; i++)
26     {
27         p[i].resize(N);//设置N*N的数组
28     }
29     int k = 0;
30     for (int j = 0; j < N / 2;j++)
31     {
32         for (int i = j; i < N - j; i++)
33         {
34             p[j][i] = k;
35             k++;
36         }
37         for (int i = 1 + j; i < N - j; i++)
38         {
39             p[i][N - j - 1] = k;
40             k++;
41         }
42         for (int i = N - 2 - j; i >= j; i--)
43         {
44             p[N - 1 - j][i] = k;
45             k++;
46         }
47         for (int i = N - 2-j; i >j; i--)
48         {
49             p[i][j] = k;
50             k++;
51         }
52     }
53     if (N % 2 == 1)
54     {
55         p[N / 2][N / 2] = k;
56     }
57
58     for (int i = 0; i < N; i++)
59     {
60         for (int j = 0; j < N; j++)
61         {
62             cout << p[i][j] << "\t";
63         }
64         cout << endl;
65     }
66     return 0;
67 }
时间: 2024-08-29 03:46:18

打印NxN的矩阵的相关文章

输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 (MD花了半天时间,思路不对害死人)

1 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 2 3 比如: 4 5 输入:5 18 6 7 输出: 8 9 1 2 3 4 5 10 11 16 17 18 0 6 12 13 15 0 0 0 7 14 15 14 0 0 0 8 16 17 13 12 11 10 9 18 19 20 21 输入: 4 12 22 23 输出: 24 25 1 2 3 4 26 27 12 0 0 5 28 29 11 0 0 6 30 31 10 9 8 7 32

顺时针打印矩阵——20

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如,输入如下矩阵: 1  2  3  4 5  6  7  8 9  10  11  12 13  14  15  16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 其实顺时针的打印,无非就是先打印出矩阵最外面的第一行,然后是最后一列,然后是最后一行,最后是第一列,每一次打印时控制的条件也就是矩阵的行和列的边界,那么打印完一圈之后只需要改变打印的范围也就是首尾行和首尾列就可以再打印

打印倒序NxN乘法表

一.实验要求: 给定任意一个字符N(N>0),然后打印NxN的倒序乘法表. 二.解决问题: #/!bin/bash# #define functionNxN_fun(){ local i=$1 #定义一个局部变量i控制外层循环 while [ $i -ge 1 ];do local j=$i  #定义一个局部变量j控制内层循环 while [ $j -ge 1 ];do echo -e -n "$i*$j=$[i*j]\t" let j-- done echo #换行 let i

矩阵的操作

矩阵的之字打印,顺时针旋转90,顺时针打印操作... //题目描述 // //对于一个矩阵,请设计一个算法,将元素按“之”字形打印.具体见样例. //给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字. //测试样例: //[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], 4, 3 //返回:[1, 2, 3, 6, 5, 4, 7, 8, 9, 12, 11, 10] //设置一个标志位或者分奇偶数即可. #in

90度翻转矩阵

/** * 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. * 要求进行原地操作!(即不开辟额外的存储空间) * * 可以分两步走. 第一步交换主对角线两侧的对称元素,第二步交换第i行和第n-1-i行,即得到结果 * 原图: 第一步操作后: 第二步操作后: * 1 2 3 4 1 5 9 13 4 8 12 16 * 5 6 7 8 2 6 10 14 3 7 11 15 * 9 10 11 12 3 7 11 15 2 6 10 14 * 13 14 15

矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. 你能原地进行操作吗?(即不开辟额外的存储空间) 这个题第一感觉就是一次交换矩阵的元素: 比如 3*3 矩阵 1 2 3 4 5 6 7 8 9 先处理第一行,一次逆时针旋转四个元素,下面是二次做的 3 2 9          3 6 9 4 5 6          2 5 8 1 8 7          1 4 7 第一次         第二次 如果是5*5的矩阵 1   2   3   4   5 6

算法笔记_003:矩阵相乘问题【分治法】

目录 1 问题描述  1.1实验题目 1.2实验目的 1.3实验要求 2 解决方案 2.1 分治法原理简述 2.2 分治法求解矩阵相乘原理 2.3 具体实现源码 2.4 运算结果截图 1 问题描述 1.1实验题目 设M1和M2是两个n×n的矩阵,设计算法计算M1×M2 的乘积. 1.2实验目的 (1)提高应用蛮力法设计算法的技能: (2)深刻理解并掌握分治法的设计思想: (3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对其进行改进,以提高算法的效率. 1.3实验要求

POJ 3150 Cellular Automaton(矩阵乘法+二分)

题目链接 题意 : 给出n个数形成环形,一次转化就是将每一个数前后的d个数字的和对m取余,然后作为这个数,问进行k次转化后,数组变成什么. 思路 :下述来自here 首先来看一下Sample里的第一组数据.1 2 2 1 2经过一次变换之后就成了5 5 5 5 4它的原理就是a0 a1 a2 a3 a4->(a4+a0+a1) (a0+a1+a2) (a1+a2+a3) (a2+a3+a4) (a3+a4+a0) 如果用矩阵相乘来描述,那就可以表述为1xN和NxN的矩阵相乘,结果仍为1xN矩阵a

打印zigzag数组

今天花了不少时间来研究如何打印一个之字形zigzag矩阵,参考了下http://blog.163.com/[email protected]/blog/static/4741291720117842634276/,具体思路和程序在下面. // test2.cpp : 定义控制台应用程序的入口点. //Date:2015年6月17日 //Author: jsalienzy /* 0 1 5 6 14 15 27 28 * 2 4 7 13 16 26 29 42 * 3 8 12 17 25 30