二维数列旋转遍历

今天做蓝桥杯省赛的模拟试题,发现一个好玩的遍历方式,旋转遍历。
大概要完成的就是生成一个数组:输入竖列行数,列数,生成一个顺时针方向递增的数组。运行效果
原题目是说有这样的一直表格,顺时针递增,我们输入这个表格的行数,列数;然后再输入一个坐标,最后输入这个坐标对应数值。
如下图:
输入: 4 4
2 2
输出: 13

先生成一个上面图片所示的数组,输出第二行第二列的元素:

在这里插入图片描述

下面是代码:

#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <math.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
 int n=0,m=0;
 int i=0,j=0;
 int q=0,w=0;
 int r,c;
 int o=3;
 cin>>n;
 cin>>m;
 cin>>r;
 cin>>c;
 long k=0;
 long biaoge[n][m];
 
 while(1)
 {
  	k++;
  	biaoge[i][j]=k;
 	 if(k==m*n) break;
 	 if(j==m-q-1 && o==0)
 	 {
 		  i++; 
 		  if(i==n-w-1) o=1;
	  }
	  else if(i==n-w-1 && o==1)
 	 {
 		  j--;
 		  if(j==q) o=2;
  		 if(j==q) w++;
	  }
	  else if(j==q && o==2)
	  {
		   i--;
		   if(i==w) o=3;
  		  if(i==w) q++;
 	 } 
 	  else if(i==w && o==3)
 	 {
 		  j++; 
 		  if(j==m-q-1) o=0;
 	 }  
  } 
  cout<<biaoge[r-1][c-1]<<endl;
 
 return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值