打印矩阵
转圈打印矩阵
描述:
代码1
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int rectangle[n+1][m+1];
memset(rectangle,0,sizeof(rectangle));
int numberectangle=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
rectangle[i][j]=numberectangle++;
printf("******************\n");
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%d ",rectangle[i][j]);
printf("\n");
}
printf("******************\n");
int total=1;
int x=1,y=0;
while(total<=n*m)
{
while(y+1<=m&&rectangle[x][y+1]!=0)
{
y++;
printf("%d ",rectangle[x][y]);
rectangle[x][y]=0;
total++;
}
while(x+1<=n&&rectangle[x+1][y]!=0)
{
x++;
printf("%d ",rectangle[x][y]);
rectangle[x][y]=0;
total++;
}
while(y-1>=1&&rectangle[x][y-1]!=0)
{
y--;
printf("%d ",rectangle[x][y]);
rectangle[x][y]=0;
total++;
}
while(x-1>=1&&rectangle[x-1][y]!=0)
{
x--;
printf("%d ",rectangle[x][y]);
rectangle[x][y]=0;
total++;
}
}
printf("\n");
}
return 0;
}
代码2
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int a=1,b=1;
int c=n,d=m;
int rectangle[n+1][m+1];
int number=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
rectangle[i][j]=number++;
printf("**************\n");
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%d ",rectangle[i][j]);
printf("\n");
}
printf("**************\n");
while(a<=c&&b<=d)
{
if(a==c)
{
for(int i=b;i<=d;i++)
printf("%d ",rectangle[a][i]);
break;
}
for(int i=a;i<=d;i++)
printf("%d ",rectangle[a][i]);
for(int i=a+1;i<=c;i++)
printf("%d ",rectangle[i][d]);
for(int i=d-1;i>=b;i--)
printf("%d ",rectangle[c][i]);
for(int i=c-1;i>a;i--)
printf("%d ",rectangle[i][b]);
a++,b++;
c--,d--;
}
printf("\n");
}
return 0;
}
旋转打印正方形矩阵
描述:
题解:
四个点进行交换,1到4位置,4到16位置,16到13位置,13到1位置;
同理2和3相应的四个点,外圈交换完后,方框向内走,直到不能构成一个正方形;
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int a=1,b=1;
int c=n,d=m;
int rectangle[n+1][m+1];
int number=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
rectangle[i][j]=number++;
printf("**************\n");
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%d ",rectangle[i][j]);
printf("\n");
}
printf("**************\n");
while(a<=c&&b<=d)
{
if(a==c)
{
for(int i=b;i<=d;i++)
printf("%d ",rectangle[a][i]);
break;
}
for(int i=a;i<=d;i++)
printf("%d ",rectangle[a][i]);
for(int i=a+1;i<=c;i++)
printf("%d ",rectangle[i][d]);
for(int i=d-1;i>=b;i--)
printf("%d ",rectangle[c][i]);
for(int i=c-1;i>a;i--)
printf("%d ",rectangle[i][b]);
a++,b++;
c--,d--;
}
printf("\n");
}
return 0;
}
“之”字形打印矩阵
描述:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int rectangle[n+1][m+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>rectangle[i][j];
int down_x=2,down_y=1;
int right_x=1,right_y=2;
int flag=1;
printf("%d ",rectangle[1][1]);
while(down_x!=right_x)
{
if(flag&1)
{
int a=right_x,b=right_y;
while(a<=down_x)
{
printf("%d ",rectangle[a][b]);
a++,b--;
}
}
else
{
int a=down_x,b=down_y;
while(a>=right_x)
{
printf("%d ",rectangle[a][b]);
a--,b++;
}
}
if(right_y+1<=m)
right_y++;
else
right_x++;
if(down_x+1<=n)
down_x++;
else
down_y++;
flag++;
}
printf("%d\n",rectangle[down_x][down_y]);
}
return 0;
}
有序矩阵找数
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int rectangle[n+1][m+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>rectangle[i][j];
int num;
while(cin>>num)
{
if(num==0)
break;
int a=1,b=m;
bool flag=0;
while(a<=n&&b>=1)
{
flag=(rectangle[a][b]==num)?1:0;
if(flag)
break;
a=(rectangle[a][b]>num)?a:a+1;
b=(rectangle[a][b]>num)?b-1:b;
}
if(flag)
printf("(%d,%d)\n",a,b);
else
printf("No Found!\n");
}
}
return 0;
}