69,369
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
bool Iw(int i,int j,int _num) //判断是不是角上 角上写0
{
if((i==0 && j==0) || (i==_num+1 && j==0) || (i==0 && j==_num+1) || (i==_num+1 && j==_num+1))
{
return false;
}
return true;
}
int main()
{
int _num =2;
/*std::cout << "input number" << std::endl;
std::cin >> _num;*/
int _max = _num*_num + 4*_num;
//int _array[_num+2][_num+2];
int _array[4][4];
int a,b,c,d,e,f=1;
for(e=0;e<(_num+3)/2; e++) //写数据
{
for(a=e; a<_num+2-e; a++) //-->写这个方向
{
if(Iw(e,a,_num))
{
_array[e][a]=f++;
if(f>_max)
goto end;
}else
_array[e][a]=0;
}
for(b=e+1; b<_num+2-e; b++)//向下写
{
if(Iw(b,a-1,_num))
{
_array[b][a-1]=f++;
if(f>_max)
goto end;
}else
_array[b][a-1]=0;
}
for(c=_num-e; c>=e; c--)//向左写
{
if(Iw(b-1,c,_num))
{
_array[b-1][c]=f++;
if(f>_max)
goto end;
}else
_array[b-1][c]=0;
}
for(d=_num-e; d>=e+1; d--)//向上写
{
if(Iw(d,c+1,_num))
{
_array[d][c+1]=f++;
if(f>_max)
goto end;
}else
_array[d][c+1]=0;
}
}
end:
for(int i=0; i<_num+2 ; i++) //打印
{
for(int j=0; j<_num+2; j++)
{
if(_array[i][j]==0)
std::cout << " ";
else
std::cout << _array[i][j] <<" ";
}
std::cout << std::endl;
}
return 0;
}
#include <iostream>
bool Iw(int i,int j,int _num) //判断是不是角上 角上写0
{
if((i==0 && j==0) || (i==_num+1 && j==0) || (i==0 && j==_num+1) || (i==_num+1 && j==_num+1))
{
return false;
}
return true;
}
int main()
{
int _num =2;
/*std::cout << "input number" << std::endl;
std::cin >> _num;*/
int _max = _num*_num + 4*_num;
//int _array[_num+2][_num+2];
int _array[4][4];
int a,b,c,d,e,f=1;
for(e=0;e<(_num+3)/2; e++) //写数据
{
for(a=e; a<_num+2-e; a++) //-->写这个方向
{
if(Iw(e,a,_num))
{
_array[e][a]=f++;
if(f>_max)
goto end;
}else
_array[e][a]=0;
}
for(b=e+1; b<_num+2-e; b++)//向下写
{
if(Iw(b,a-1,_num))
{
_array[b][a-1]=f++;
if(f>_max)
goto end;
}else
_array[b][a-1]=0;
}
for(c=_num-e; c>=e; c--)//向左写
{
if(Iw(b-1,c,_num))
{
_array[b-1][c]=f++;
if(f>_max)
goto end;
}else
_array[b-1][c]=0;
}
for(d=_num-e; d>=e; d--)//向上写
{
if(Iw(d,c+1,_num))
{
_array[d][c+1]=f++;
if(f>_max)
goto end;
}else
_array[d][c+1]=0;
}
}
end:
for(int i=0; i<_num+2 ; i++) //打印
{
for(int j=0; j<_num+2; j++)
{
if(_array[i][j]==0)
std::cout << " ";
else
std::cout << _array[i][j] <<" ";
}
std::cout << std::endl;
}
return 0;
}
for(int i=0,j=0,x=1; i<_num+2; i++,j++)
{
if((i==0 && j==0) || (i==_num+1 && j==0) || (i==0 && j==_num+1) || (i==_num+1 && j==_num+1))
{
_array[i][j] =0;
continue;
}
_array[i][j]=x++;
}
for(int i=0,j=0; i<_num+2 ; i++,j++)
{
if(_array[i][j]==0)
std::cout << " " << std::endl;
else
std::cout << _array[i][j] << std::endl;
}
1 2 3 4 5 6 7 8 9 10
40 41 42 43 44 45 46 47 48 49 50 11
39 76 77 78 79 80 81 82 83 84 51 12
38 75 104 105 106 107 108 109 110 85 52 13
37 74 103 124 125 126 127 128 111 86 53 14
36 73 102 123 136 137 138 129 112 87 54 15
35 72 101 122 135 140 139 130 113 88 55 16
34 71 100 121 134 133 132 131 114 89 56 17
33 70 99 120 119 118 117 116 115 90 57 18
32 69 98 97 96 95 94 93 92 91 58 19
31 68 67 66 65 64 63 62 61 60 59 20
30 29 28 27 26 25 24 23 22 21
#include <stdio.h>
int dij[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int n, turn, data;
int **init(void);
void print(int **arr);
int main()
{
int i, j, tot, data, k, **arr;
arr = init();
data = 1;
i = j = 0;
tot = n * n - 4;
arr[0][0] = -1;
for (k = 0; k < tot;)
{
i += dij[turn][0];
j += dij[turn][1];
if (i + j == 2 * n - 2 || (i * j == 0) && (i + j == n - 1))
turn = (turn + 1) % 4;
else
{
if (arr[i][j])
{
i -= dij[turn][0];
j -= dij[turn][1];
turn = (turn + 1) % 4;
}
else {arr[i][j] = data++; k++;}
}
}
arr[0][0] = 0;
print(arr);
return 0;
}
int** init()
{
int i, **arr;
scanf("%d", &n);
n += 2;
arr = (int**) malloc((n) * sizeof(int*));
for (i = 0; i < n; ++i)
{
arr[i] = (int*) malloc((n) * sizeof(int));
memset(arr[i], 0, n * sizeof(int));
}
return arr;
}
void print(int **arr)
{
int i, j;
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
if (arr[i][j]) printf("%4d ", arr[i][j]);
else printf("%4c ", ' ');
printf("\n");
}
}