先上自己写的代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int limit;
long count = 1;
int k = 0;
int b = 0;
int j = 0;
int c = 1;
int e = 1;
int f = 0;
int h = 1;
int m = 2;
int p = 0;
int n;
printf("请输入矩形的边长:\n");
scanf("%d",&limit);
n = limit - 1;
long canva[limit][limit];
while(count != (limit * limit))
{
for(int i = j; i < limit - k; i++)//向右打印横行
{
canva[j][i] = count++;
}
j++;
k++;
for(int a = c;a <= (n - b); a++)// 向下打印竖行
{
canva[a][n-b] = count++;
}
c++;
b++;
for(int d = limit - e-1; d >=f ; d--)//反向打印横行
{
canva[limit-e][d] = count++;
}
f++;
e++;
for(int g = limit - m; g >=h ; g--)//向上打印竖行
{
canva[g][p] = count++;
}
h++;
p++;
m++;
}
for(int z = 0; z < limit; z++)//输出数组
{
for(int v = 0; v < limit; v++)
{
printf("%5d",canva[z][v]);
if( (v+1) % limit == 0)
putchar('\n');
}
}
putchar('\n');
system("pause");
return 0;
}
先不说这么写有多麻烦,我只想大神帮我看一下逻辑对不对,因为我在纸上
写了感觉是对的,但运行结果总不对,而且只有奇数才能跳出循环,输入偶数
的话就打印不出来
下面是运行结果
这个是奇数
下一个输入偶数打印不出来,循环跳不出来
#include <iostream>
#include <vector>
using namespace std;
void print_circle(vector< vector<int> > &arr,int a,int b,int c,int d)
{
if (a == c)
{
for(int i=b;i<=d;i++)
cout<<arr[a][i]<<" ";
}
else if(b == d)
{
for(int i=a;i<=c;i++)
cout<<arr[i][b]<<" ";
}
else
{
int row = a;
int column = b;
while(column != d)
cout<<arr[a][column++]<<" ";
while(row != c)
cout<<arr[row++][column]<<" ";
while(column != b)
cout<<arr[c][column--]<<" ";
while(row != a)
cout<<arr[row--][b]<<" ";
}
}
int main()
{
int m,n,temp;
cin>>m>>n;
vector< vector<int> > arr( m, vector<int>(n) );
for(int i=0;i<arr.size();i++)
for(int j=0;j<arr[0].size();j++)
{
cin>>temp;
arr[i][j] = temp;
}
int a=0,b=0,c=m-1,d=n-1;
while(a<=c && b<=d)
print_circle(arr,a++,b++,c--,d--);
system("pause");
return 0;
}
这里的输出函数没有做好:
for(int z = 0; z < limit; z++)//输出数组
{
for(int v = 0; v < limit; v++)
{
printf("%5d",canva[z][v]);
if( (v+1) % limit == 0)
putchar('\n');
}
}