摘要:下面是希赛软考学院为大家提供的软考程序员教程重点提炼之旋矩阵算法,希望能帮助学友们。
下面是希赛软考网为大家提供的软考程序员教程重点提炼之旋矩阵算法,希望能帮助学友们。
这个问题看似很难,但是其实只有有了正确的,规范的逻辑思想算法以后(就像看了这个算法以后),感觉其实这个问题很简单,于是我们不但要学习高深的算法,还要掌握一流的逻辑思维理念。这个算法值得我们学习的地方就是他的数学建模思想,把复杂的问题抽象出来,成为了4个方向的结构式模块组合,于是复杂的问题就简单化了!!!
#include<iostream>
#include<iomanip>
using namespace std;
void right();//向左输入的赋值函数
void down();
void left();
void up();
void show();//显示函数
void sort();//控制方向的函数
int value;
int direction=0;//控制方向
int rightNum=0;//向右输入一行的次数
int downNum=0;
int leftNum=0;
int upNum=0;
int arrayNum=0;//自增赋值数
int row=0;//保存行下标
int col=0;//保存列下标
int array[100][100];//保存数组
int main(int argc,char*argv[])
{
cout<<\"N*N,enter N:\">>endl;
cin>>value;
sort();
show();
system(\"pause\");
return 0;
}
void sort()
{
while(arrayNum!=value*value)//循环跳出条件,赋值完毕
{
switch(direction)
{
case 0:
right();
break;
case 1:
down();
break;
case 2:
left();
break;
case 3:
up();
break;
default:
break;
}
}
return;
}
void right()
{
int m=row;
int n=col;
if(m==0&&n==0)
{
array[m][n]=++arrayNum;
}
for(int i=n+1;i<value-rightNum;i++)
{
array[m]<i>=++arrayNum;
n++;
}
row=m;
col=n;
rightNum++;
direction=1;
return;
}
void down()
{
int m=row;
int n=col;
for(int i=m+1;i<value-downNum;i++)
{
array<i>[n]=++arrayNum;
m++;
}
row=m;
col=n;
downNum++;
direction=2;
return;
}
void left()
{
int m=row;
int n=col;
for(int i=n-1;i>=leftNum;i--)
{
array[m]<i>=++arrayNum;
n--;
}
row=m;
col=n;
leftNum++;
direction=3;
return;
}
void up()
{
int m=row;
int n=col;
for(int i=m-1;i<upNum;i--)
{
array<i>[n]=++arrayNum;
m--;
}
row=m;
col=n;
upNum++;
direction=0;
return;
}
void show()
{
int n=0;
for(int i=0;i<value;i++)
{
for(int j=0;j<value;j++)
{
cout<<setw(value)<<array<i>[j];
}
cout<<endl;
}
}
希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库(软考历年真题)、软考培训教材和软考视频教程,多样的培训方式包括在线辅导、面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。
软考备考资料免费领取
去领取