這個(gè)問題看似很難,但是其實(shí)只有有了正確的,規(guī)范的邏輯思想算法以后(就像看了這個(gè)算法以后),感覺其實(shí)這個(gè)問題很簡(jiǎn)單,于是我們不但要學(xué)習(xí)高深的算法,還要掌握一流的邏輯思維理念。這個(gè)算法值得我們學(xué)習(xí)的地方就是他的數(shù)學(xué)建模思想,把復(fù)雜的問題抽象出來,成為了4個(gè)方向的結(jié)構(gòu)式模塊組合,于是復(fù)雜的問題就簡(jiǎn)單化了?。?!
#include
#include
using namespace std;
void right(); //向左輸入的賦值函數(shù)
void down();
void left();
void up();
void show(); //顯示函數(shù)
void sort(); //控制方向的函數(shù)
int value;
int direction = 0; //控制方向
int rightNum = 0; //向右輸入一行的次數(shù)
int downNum = 0;
int leftNum = 0;
int upNum = 0;
int arrayNum = 0; //自增賦值數(shù)
int row = 0; //保存行下標(biāo)
int col =0; //保存列下標(biāo)
int array[100][100]; //保存數(shù)組
int main(int argc, char *argv[])
{
cout<<\"N*N, enter N:\"< cin>>value;
sort();
show();
system(\"pause\");
return 0;
}
void sort()
{
while(arrayNum != value*value) //循環(huán)跳出條件,賦值完畢
{
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 {
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 {
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 {
for(int j=0; j {
cout< cout< }
}
#include
#include
using namespace std;
void right(); //向左輸入的賦值函數(shù)
void down();
void left();
void up();
void show(); //顯示函數(shù)
void sort(); //控制方向的函數(shù)
int value;
int direction = 0; //控制方向
int rightNum = 0; //向右輸入一行的次數(shù)
int downNum = 0;
int leftNum = 0;
int upNum = 0;
int arrayNum = 0; //自增賦值數(shù)
int row = 0; //保存行下標(biāo)
int col =0; //保存列下標(biāo)
int array[100][100]; //保存數(shù)組
int main(int argc, char *argv[])
{
cout<<\"N*N, enter N:\"<
sort();
show();
system(\"pause\");
return 0;
}
void sort()
{
while(arrayNum != value*value) //循環(huán)跳出條件,賦值完畢
{
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
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
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
for(int j=0; j
cout<
}

