旋转数组

描述:

某个图像通过一个整数组成的m*n矩阵表示,其中每个整数表示一个像素值。写出一种方法,根据flag变量的值将图像向右或者向左旋转90°。如果flag值为0,则向左旋转,如果flag为1,则向右旋转。

函数rotatePictureMethod的输入分别由矩阵matrix、矩阵的维度m和n以及flag的值组成。

函数应返回一个指向二维矩阵指针,该矩阵是按照flag值旋转后的结果矩阵而动态分配的。

示例:

如果标志flag=1且m=3,n=3,

输入矩阵

1   2   3

4   5   6

7   8   9

输出矩阵

7   4   1

8   5   2

9   6   3

思路:

逆时针旋转:

1 交换主对角线对称的元素;

2 交换第i行和第n-1-i行;

顺时针旋转:

1 交换副对角线对称的元素;

2 交换第i行和第n-1-i行;

原图:           第一步操作后:   第二步操作后:

C++代码:

#include <iostream>
using namespace std; void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
} // 逆时针旋转
void transpose(int a[][], int n)
{
for (int i = ; i < n; i++)
for (int j = i+; j < n; j++)
swap(a[i][j], a[j][i]);
for (int i = ; i < n / ; i++)
for (int j = ; j < n; j++)
swap(a[i][j], a[n - - i][j]);
} // 顺时针旋转
void clockwise(int a[][], int n)
{
for (int i = ; i < n; i++)
for (int j = ; j < n - i; j++)
swap(a[i][j], a[n - - j][n - - i]);
for (int i = ; i < n / ; i++)
for (int j = ; j < n; j++)
swap(a[i][j], a[n - - i][j]);
} int main(int argc, char** argv)
{
int a[][] = {
{, , , },
{, , , },
{, , , },
{, , , }
};
cout << "原矩阵" << endl;
for (int i = ; i < ; ++i) {
for (int j = ; j < ; ++j)
cout << a[i][j] << " ";
cout << endl;
}
cout << endl;
transpose(a, );
cout << "逆时针转90度" << endl;
for (int i = ; i < ; ++i) {
for (int j = ; j < ; ++j)
cout << a[i][j] << " ";
cout << endl;
}
cout << endl; int a2[][] = {
{, , , },
{, , , },
{, , , },
{, , , }
};
cout << "原矩阵" << endl;
for (int i = ; i < ; ++i) {
for (int j = ; j < ; ++j)
cout << a2[i][j] << " ";
cout << endl;
}
clockwise(a2, );
cout << endl;
cout << "顺时针转90度" << endl;
for (int i = ; i < ; ++i) {
for (int j = ; j < ; ++j)
cout << a2[i][j] << " ";
cout << endl;
} return ;
}

打印一个有规律的矩阵

描述:

给定一个整数n,以下列方式打印n行。

如果n=4,生成的排列将为:

1*2*3*4

9*10*11*12

13*14*15*16

5*6*7*8

函数squarePatternPrint的输入应包括一个整数n(假设0<=n<=100)。不要从函数返回任何内容。使用cout打印所需的阵列。

各输出行只能由“数字”和“*”组成,不应有空格。

有用的命令:cout可将内容打印到屏幕上。

思路:

如果n为偶数,就打印n/2行,如果n为奇数,就打印n/2+1行;

以n=4举例,先打印1*2*3*4,把5压进栈,5+n = 9,打印9*10*11*12,把13压进栈,此时从栈顶读取13,打印13*14*15*16,弹出栈顶元素13,继续从栈顶读取5,打印5*6*7*8,判断此时栈内为空,end.

这种思路有些繁琐,我觉得肯定有更好的思路,只是我没想起来,如果你有更好的思路,欢迎评论!

C++代码:

#include <iostream>
#include <stack>
using namespace std; void sprint(int n)
{
stack<int> nums;
int i = , j = , flag = ;
if (n % == )
flag = n / ;
else
flag = n / + ;
for (; i <= flag; i++)
{
for (int k = ; k < n; k++)
{
if (j % n == ) cout << j;
else cout << j << "*";
j++;
}
nums.push(j);
j = j + n;
cout << endl;
}
if (n % != )
nums.pop();
while (!nums.empty())
{
int top = nums.top();
nums.pop();
for (int k = ; k < n; k++)
{
if (top % n == ) cout << top;
else cout << top << "*";
top++;
}
cout << endl;
}
} int main()
{
sprint();
}

参考:

http://www.voidcn.com/article/p-wusaguhx-bbb.html

https://blog.csdn.net/qq_26525215/article/details/52076488

C++之旋转矩阵和打印一个有规律的矩阵的更多相关文章

  1. js快速打印一个五分制(五颗星)的评分情况

    1.函数 下面这个函数实现了在html页面中快速打印一个五分制(五颗星)的评分情况: function getRating(rating) { if(rating > 5 || rating & ...

  2. excel表格中打开可以显示整个表格但是打印却只能打印一个单元格

    excel表格中打开可以显示整个表格但是打印却只能打印一个单元格 如下图显示 解决办法 2007 版菜单栏上 ----->页面布局----->打印区域----->取消打印.即可正常. ...

  3. 每隔10秒钟打印一个“Helloworld”

    /** * 每隔10秒钟打印一个“Helloworld” */ public class Test03 { public static void main(String[] args) throws ...

  4. 检索并打印一个DNS主机条目

    检索并打印一个DNS主机条目的 C 程序 --- Linux/Unix /*************************************************************** ...

  5. python3 练习题100例 (二十五)打印一个n层金字塔

    题目内容: 打印一个n层(1<n<20)金字塔,金字塔由“+”构成,塔尖是1个“+”,下一层是3个“+”,居中排列,以此类推. 注意:每一行的+号之后均无空格,最后一行没有空格. 输入格式 ...

  6. java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.

    需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...

  7. 通过原生JS打印一个空心菱形图案

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 如何优雅地打印一个Java对象?

    你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下). 在一个月黑风高的夜晚,我思前想后,觉得再也不能 ...

  9. 使用那各VUE的打印功能(print.js)出现多打印一个空白页的问题

    最近这段时间,用VUE写东西,有个打印功能. 百度了一下,铺天盖地的VUE打印的两种实现方法. 很感激这些千篇一律的帖子,虽然不知道他们是否真的用过,还是只是复制粘贴. 至少这些帖子告诉我,是有两个可 ...

随机推荐

  1. Swift 3.0 Date的简单使用

    // // ViewController.swift // Date的使用 // // Created by 思 彭 on 16/9/20. // Copyright © 2016年 思 彭. All ...

  2. docker下载镜像

    注意:必须先搜索镜像,否则有时候无法下载 Docker下载Redis镜像并运行容器 .搜索查找镜像 docker search redis .下载镜像 docker pull redis:latest ...

  3. vue中如何编写可复用的组件?

    原文地址 Vue.js 是一套构建用户界面的渐进式框架.我们可以使用简单的 API 来实现响应式的数据绑定和组合的视图组件. 从维护视图到维护数据,Vue.js 让我们快速地开发应用.但随着业务代码日 ...

  4. C语言链表之两数相加

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  5. 【JulyEdu-Python基础】第 8 课:Python第三方库

    outline 数值计算 numpy 数据处理分析 pandas 可视化 matplotlib/seaborn 机器学习 Sklearn / keras 交互 pygame 网络 Selen ...

  6. ValueError: numpy.dtype has the wrong size, try recompiling

    问题ValueError: numpy.dtype has the wrong size, try recompiling解决 这是因为 Python 包的版本问题,例如安装了较旧版本的 Numpy, ...

  7. 李宏毅 线性回归预测PM2.5

    作业说明 给定训练集train.csv,要求根据前9个小时的空气监测情况预测第10个小时的PM2.5含量. 训练集介绍: (1):CSV文件,包含台湾丰原地区240天的气象观测资料(取每个月前20天的 ...

  8. ip地址查询python3小工具_V0.0.1

    看到同事在一个一个IP地址的百度来确认导出表格中的ip地址所对应的现实世界的地址是否正确,决定给自己新开一个坑.做一个查询ip“地址”的python小工具,读取Excel表格,在表格中的后续列输出尽可 ...

  9. [CF544E]Remembering Strings_状压dp

    E. Remembering Strings 题目大意: You have multiset of n strings of the same length, consisting of lowerc ...

  10. C++中的bool类型

    1.C++中的布尔类型 (1)C++在C语言的基础类型系统之上增加了bool: 1)C语言中,没有bool类型存在,往往都是用整型代替bool类型,常用0表示假,1表示真: 2)bool本来就有这样的 ...