蓝桥杯回形取数

看的别人的解法,就是按照下右上左的顺序走圈,一直到m*n个数走完为止(while来判定)
这里要注意越界的数组的值也是0,所以while跳出后要将++i的值减回来;还有就是一开始设定的i\j的值一定要放到while的外面,否则每一轮while都重新走了

#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;


int a[201][201];
//int b[21];
int main()
{
    
    
	int m,n;
	cin >> m >> n;
	//memset(a,0,sizeof(a));
	for(int i=0;i<m;i++){
    
    
		for(int j=0;j<n;j++){
    
    
			cin >> a[i][j];
		}
	}
	
	int s = m*n;
	int i=-1,j=0;  //这里的值一定要放在while的外面
	while(s){
    
      //判定有没有走完
		//下
		while(a[++i][j]!= -1 && i<m && s){
    
    
			cout << a[i][j]<< " ";
			a[i][j] = -1;
			s--;
	    }
		i--;  //此时已经跳出while循环了,但是i已经加1了,所以要减回来
		
		//右
		while(a[i][++j]!= -1 && j<n && s){
    
    
			cout << a[i][j]<< " ";
			a[i][j] = -1;
			s--;
	    }
		j--;
		//上
		while(a[--i][j]!= -1 && i>=0 && s){
    
    
			cout << a[i][j]<< " ";
			a[i][j] = -1;
			s--;
	    }
		i++;
		
		//左
//		int t = a[2][4];
//		cout << t << endl;
		while(a[i][--j]!= -1 && j>=0 && s){
    
     
			cout << a[i][j]<< " ";
			a[i][j] = -1;
			s--;
	    }
		j++;		 
	}return 0;
	
}

Guess you like

Origin blog.csdn.net/weixin_44044395/article/details/115801049
Recommended