z形矩阵(蛇形矩阵)

来源:互联网 发布:网络诈骗的总结 编辑:程序博客网 时间:2024/05/17 22:09

 一个简单的模拟程序,上次比赛时到最后没时间做了。

给出行数和列数,按照第一步向右或向下输出蛇形矩阵。

 

样例输入和输出:

 

 

先贴一个简单的,行数和列数相等的:

 

#include<iostream>#include<iomanip>using namespace std;int N;int dir;int map[100][100];int ID;int main(){char c;while(cin>>N>>c){if(c=='R')dir=0;elsedir=1;ID=1;for(int i=0;i<N;i++){for(int j=0;j<=i;j++){if((i+dir)%2==0)          //偶数列{map[i-j][j]=ID;ID++;}else if((i+dir)%2==1){map[j][i-j]=ID;ID++;}}}for(i=N;i<=2*N-2;i++){for(int j=0;j<2*N-i-1;j++){if((i+dir)%2==0){map[(N-1)-j][i-(N-1)+j]=ID;ID++;}else if((i+dir)%2==1){map[i-(N-1)+j][(N-1)-j]=ID;ID++;}}}for(i=0;i<N;i++){for(int j=0;j<N;j++){cout<<left<<setw(4)<<map[i][j];}cout<<endl;}}return 0;}


 

 

下面是任意矩形的:

 

#include<iostream>#include<iomanip>using namespace std;int N,M;int map[100][100];int ID;int dir;char c;int main(){int MAX,MIN;while(cin>>N>>M>>c){if(c=='R')dir=0;elsedir=1;ID=1;MAX= N>=M? N:M;MIN= N<=M? N:M;for(int i=0;i<MIN;i++){for(int j=0;j<=i;j++){if((dir+i)%2==0){map[i-j][j]=ID;ID++;}else if((dir+i)%2==1){map[j][i-j]=ID;ID++;}}}if(M>N){for(i=N;i<M;i++)   //中间的{for(int j=0;j<N;j++){if((dir+i)%2==0){map[(N-1)-j][i-(N-1)+j]=ID;ID++;}else if((dir+i)%2==1){map[j][i-j]=ID;ID++;}}}}else if(N>M){for(int i=M;i<N;i++){for(int j=0;j<M;j++){if((dir+i)%2==0){map[i-j][j]=ID;ID++;}else if((dir+i)%2==1){map[i-(M-1)+j][(M-1)-j]=ID;ID++;}}}}for(i=MAX;i<=M+N-2;i++){for(int j=0;j<N+M-i-1;j++){if((dir+i)%2==0){map[(N-1)-j][i-(N-1)+j]=ID;ID++;}else if((dir+i)%2==1){map[i-(M-1)+j][(M-1)-j]=ID;ID++;}}}for(i=0;i<N;i++){for(int j=0;j<M;j++){cout<<left<<setw(3)<<map[i][j];}cout<<endl;}}return 0;}