输入一个数字i,需要返回的内容如下:
- 输入一个数字i,输出结果的矩阵是i行i列的。
矩阵从右上角开始,从1开始往下,每增加1行加1。
到第i行后,再往左,每左一列加1。
到头后再往上、往右、再往下….,
其中已经填上的数字不能覆盖,直接转向,
现要求输入任意元素i,返回矩阵内容;
code(仅供参考):
#include <iostream>
using namespace std;
int main(){
int i;
cout<<"请输入i:"<<endl;
cin>>i;
int out[i][i];
int count = 1;
int m = i/2 + 1 ;
int xyv = 0;
int n = 0;
int icount = 1;
while(icount != m ){
for (int j= xyv ; j <= i - icount ; ++j)
{
out[j][i - icount] = count;
count++;
}
for (int y = i - icount -1; y >= xyv ; --y)
{
out[i - icount][y] = count;
count++;
}
for (int x = i - icount -1; x >= xyv ; --x)
{
out[x][xyv] = count;
count++;
}
for (int ty = icount; ty <= i - icount -1;++ty)
{
out[xyv][ty] = count;
count++;
}
icount++;
xyv++;
}
m--;
if(i%2==1)
out[m][m] = i*i;
for(int k0 = 0; k0 < i; ++k0)
{
for (int k1 = 0; k1 < i; ++k1)
{
printf("%4d", out[k0][k1]);
}
cout<<endl;
}
return 1;
}
思路:一个while一组四个箭头:
运行结果:
网友评论