C++输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,

//输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
//例如,如果输入如下矩阵: 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. 

#include <iostream>
using namespace std;
void Grial(int (*a)[5],int n)
{
	int a1 = 0;
	int b1 = n-1;
	bool visted[n][n];
	for(int k=0;k<n;k++)
	{
		for(int m=0;m<n;m++)
		{
			visted[k][m]=false;
		}
	}
	int i=0;
	int j=0;
	while(1)
	{
	for(i=a1;i<=b1;i++)
	{
		if(visted[a1][i]==false)
		{
			cout<<a[a1][i]<<" " ;
			visted[a1][i]=true;
		}
	}
	for(j=a1+1;j<=b1;j++)
	{
		if(visted[j][b1]==false)
			{
				cout<<a[j][b1]<<"  ";
				visted[j][b1]=true;
			}
	}
	for(i=b1-1;i>=a1;i--)
	{
		if(visted[b1][i]==false)
			{
			cout<<a[b1][i]<<" " ;
			visted[b1][i]=true;
			}
	}
	for(i=b1-1;i>a1;i--)
	{
		if(visted[i][a1]==false)
		{
			cout<<a[i][a1]<<" ";
			visted[i][a1]=true;
		}
	}
    i++;
		if(visted[i][a1]==true && visted[i+1][a1]==true && visted[i][a1+1]==true &&
			 visted[i][a1-1]==true && visted[i-1][a1]==true)return ;
		a1++;
		b1--;
	}
}
int main()
{
	int a[][5]={1,2,3,4,5,
							6,7,8,9,10,
							11,12,13,14,15
							,16,17,18,19,20
							,21,22,23,24,25};
	Grial(a,5);
	return 0;
}

结果如下:

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

时间: 2024-10-03 22:29:03

C++输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,的相关文章

剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 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.

1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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. 2 思路和方法 直接定义一个矩形,在矩形的四条边取值,程序大大简化. 3 核心代码 1 class Solution { 2 public: 3 vector<int> printMatrix(vector<

java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文

现在网上大多数用于判断中文字符的是 U+4E00..U+9FA5 这个范围是只是"中日韩统一表意文字"这个区间,但这不是全部,如果要全部包含,则还要他们的扩展集.部首.象形字.注间字母等等; 2E80-A4CF: 包含了中日朝部首补充.康熙部首.表意文字描述符.中日朝符号和标点.日文平假名.日文片假名.注音字母.谚文兼容字母.象形字注释标志.注音字母扩展.中日朝笔画.日文片假名语音扩展.带圈中日朝字母和月份.中日朝兼容.中日朝统一表意文字扩展A.易经六十四卦符号.中日韩统一表意文字.彝

print(n) 和 while/for 并列的时候, print()只会打印出最后一个结果

n=0while n <10: n+=1print(n) # print(n)放在while的外面和while并列的时候, 只会打印出最后一个结果 n=0while n <10: n+=1 print(n) # 当print()放在while里面,和上面n+=1对齐时,每次都会打印,所以打印的是: 1 2 3 4 5 6 7 8 9 10 原文地址:https://www.cnblogs.com/jack20181017/p/9867877.html

java基础练习 给定一个正整数m,统计m的位数,分别打印每一位数字,再按照逆序打印出各位数字。

要求:m定义为类的属性,需定义构造函数为m赋值:当m大于99999时,输出错误信息“the number is too large”,不再执行. public class T { private int m; public T(int m) { super(); this.m = m; } public int getM() { return m; } public void setM(int m) { this.m = m; } public void M() { if(m>99999) {

输入6个人的成绩(各不相同),打印出最大成绩的是第几个人

#include<stdio.h> void main() {  int i,jing[5],ti,cheng[5]; for(i=0;i<6;i++) {  printf("第%d人的成绩是:",i+1); scanf("%d",&jing[i]);  } for(i=0;i<6;i++) { cheng[i]=jing[i]; } for(i=0;i<6;i++) { if(cheng[i]>cheng[i+1]) {

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

输入一个维度,逆时针打印出一个指定的矩阵

题目:用户给定一个维度,打印出指定的一个矩阵,例如用户给定10,输出应该如下图所示: 程序如下: #include <stdio.h> #include <malloc.h> int main() { int dimension; int *p; int startx, starty, endx, endy; int i, j, value = 0; printf("Please input dimension:"); scanf("%d",

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字的最小的一个

/** * @Version 1.0.0 * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数, * 打印能拼接出的所有数字的最小的一个.例如输入{3,32,321,4},则打印最小的数字是 * 321323 * * 其实就是一次排序,只是比较大小的方式与数值比较有所不同 * 这里采用冒泡排序的方式 */public class Pro33 { @MyAnswer public static void f(int array[]){ for(int i=0;i<array.length-1

Task 4.2 求一个矩阵的最大子矩阵的和

任务:输入一个二维整形数组,数组里有正数也有负数.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). (1)设计思想:把二维矩阵分解成行.列的情况,可以相应把问题简化.之后分别依照行和列的基准来求每一个矩阵的和,再依次进行比较每个矩阵的和.最容易想到也是最容易实现的方法.遍历矩阵(行迭代器为i,列迭代器为j),以当前遍历到的元素为首a[i,j],计算二维子矩阵的和(sum=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+