首页 > 编程语言 >算法题-回形取数

算法题-回形取数

时间:2022-11-29 11:26:39浏览次数:37  
标签:count int 矩阵 取数 算法 回形 表达式

算法题-回形取数

描述

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

输入

​ 输入描述:

​ 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。

​ 输入样例:

​ 3 3

​ 1 2 3

​ 4 5 6

​ 7 8 9

输出

​ 输出描述:

​ 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

​ 输出样例:

​ 1 4 7 8 9 6 3 2 5

思路

1.找出规律,是这类型题的重点

2.如何判断已经全部循环完结束了,可以用一个变量记录count<m*n(输出一个数,count++,count代表已经遍历过的个数;m,n分别代表矩阵的行和列)

  • 复习一个小知识点

    三目运算符:

    对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。

    ? : ; "?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。

    注意:在C语言中,结果1 和 结果2的类型必须一致。

    可以用来控制行末不要有空格。

	int a[] ={1,2,3,4};
	for(int i=0;i<4;i++){
		printf(i ? " %d" : "%d",a[i]);
	}
    输出:1 2 3 4

该算法题代码如下:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	int m,n;//m代表矩阵的行,n代表矩阵的列
	int a[200][200];//用来存储矩阵 
	//读入 m,n并且读入矩阵 
	cin>>m>>n;    
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			cin>>a[i][j];
		}
	}
	int flag=0;//用来控制行末不要有空格 
	int count=0;//用来计数,遍历完一个就count++
	int circle=0;//表示遍历完几圈了 
	while(count<m*n) //通过判断count是否小于m*n即矩阵元素个数来终止遍历 ,下面每一个for循环也是需要判断 
	{
		for(int i=circle;i<=m-1-circle&&count<m*n;i++)  //第一列 
		{
			if(flag==0)
			{
				cout<<a[i][circle];
				count++;
				flag++;
			}
			else
			{
				cout<<" "<<a[i][circle];
				count++;	
			}

		}
		for(int j=circle+1;j<=n-1-circle&&count<m*n;j++) //最后一行 
		{
			cout<<" "<<a[m-1-circle][j];
			count++;
		}
		for(int k=m-2-circle;k>=circle&&count<m*n;k--) //最后一列 
		{
			cout<<" "<<a[k][n-1-circle];
			count++;
		}
		for(int h=n-2-circle;h>=circle+1&&count<m*n;h--)//第一行 
		{
			cout<<" "<<a[circle][h];
			count++;
		}
		circle++;	
	}
	return 0;
}

标签:count,int,矩阵,取数,算法,回形,表达式
From: https://www.cnblogs.com/qinyueblog/p/16934860.html

相关文章

  • 获取数组中不同的部分
    getDiffArr(oldData,newData){//去重letarr1=newSet(oldData);//原数组letarr2=newSet(newData);//新数组letList=[];......
  • 【小航的算法日记】因子分解和枚举
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1952.三除数​​​​解:​​​​题:1492.n的第k个因子​​​​解:​​​​题:1362.最接近的因数​​​​解:......
  • 【小航的算法日记】算术基本定理
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:507.完美数​​​​解:​​​​题:263.丑数​​​​解:​​详情请看英雄哥的专栏内容,以下为Java版一、概念​......
  • 【小航的算法日记】最大公约数
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1979.找出数组的最大公约数​​​​解:​​​​题:LCP02.分式化简​​​​解:​​​​题:1819.序列中不同最大......
  • 【小航的算法日记】 线性枚举(一) - 最值算法
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:485.最大连续1的个数​​​​解:​​​​题:1464.数组中两元素的最大乘积​​​​解:​​​​题:153.寻找旋......
  • 【小航的算法日记】因子和
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1390.四因数​​​​解:​​一、概念因子和二、模板看例题三、例题题:1390.四因数给你一个整数数组​​nums......
  • 【小航的算法日记】最小公倍数
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1819.序列中不同最大公约数的数目​​​​解:​​一、概念推导:由算术基本定理得:则,(1)X(2)得:即:二、模板给定两个......
  • 【小航的算法日记】变量交换算法
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:面试题16.01.交换数字​​​​解:​​​​题:面试题05.07.配对交换​​​​解:​​内容摘自英雄哥,详情请看......
  • 【小航的算法日记】线性枚举(二) - 统计法入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1550.存在连续三个奇数的数组​​​​解:​​​​题:1295.统计位数为偶数的数字​​​​解:​​​​题:540.有......
  • 【小航的算法日记】进制转换(二) - 进阶
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:202.快乐数​​​​解:​​​​题:168.Excel表列名称​​​​解:​​​​题:171.Excel表列序号​​​​解:​​......