69,369
社区成员
发帖
与我相关
我的任务
分享
int main(){
const int n = 5;
int arr[n][n] = {0};
int direction[4][2] = {{1, 0}, //right
{0, 1}, //down
{-1, 0}, //left
{0, -1}}; //up
int dx = 1, dy = 0, x = 0, y = 0, dir = 0;
for(int i = 0; i < n * n; i++, x += dx, y += dy){
arr[x][y] = i + 1;
if(x + dx == -1 || y + dy == -1 || x + dx == n || y + dy == n
|| arr[x + dx][y + dy] != 0){
dir = (dir + 1) % 4;
dx = direction[dir][0];
dy = direction[dir][1];
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++)
printf("%2d ", arr[i][j]);
printf("\n");
}
}
#include <stdio.h>
#define MAXN 10
char m[MAXN+2][MAXN+2];
char d;
int x,y,k,n;
void main() {
while (1) {
printf("Input n(1..%d):",MAXN);
fflush(stdout);
rewind(stdin);
if (1==scanf("%d",&n)) {
if (1<=n && n<=MAXN) break;
}
}
y=0 ;for (x=0;x<=n+1;x++) m[y][x]=1;
y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;
x=0 ;for (y=0;y<=n+1;y++) m[y][x]=1;
x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
m[y][x]=0;
}
}
x=1;
y=1;
k=0;
d='D';
while (1) {
k++;
if (k>n*n) break;
m[y][x]=k;
switch (d) {
case 'D':
if (0==m[y+1][x]) y++;
else {x++;d='R';}
break;
case 'R':
if (0==m[y][x+1]) x++;
else {y--;d='U';}
break;
case 'U':
if (0==m[y-1][x]) y--;
else {x--;d='L';}
break;
case 'L':
if (0==m[y][x-1]) x--;
else {y++;d='D';}
break;
}
}
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
printf("%4d",m[y][x]);
}
printf("\n");
}
}
void main()
{
int n,i,max;
int row,col;
int *mat;
int flag;
printf("please enter the edge:");
scanf("%d",&n);
flag=0;
max=n*n;
row=0;col=0;
mat=(int*)malloc(sizeof(int)*max);
for(i=0;i<max;i++)
{
mat[row*n+col]=i+1;
switch(flag)
{
case 0:
row++;
if(n-row-col==1)
flag=1;
break;
case 1:
col++;
if(row==col)
flag=2;
break;
case 2:
row--;
if(n-row-col==1)
flag=3;
break;
case 3:
col--;
if((col-1)==row)
flag=0;
break;
}
}
for(i=0;i<max;i++)
{
printf("%4d ",mat[i]);
if((i+1)%n==0)
printf("\n");
}
system("pause");
}
#include <iostream>
#define MaxEdge 10
using namespace std;
void f(int start_edge)
{
int Matrix[MaxEdge][MaxEdge];
int curt_edge;
curt_edge=start_edge;
int max_value=start_edge*start_edge;
int cur_row=1,cur_col=1;
int cur_value=1;
while (curt_edge>0)
{
int ctr_right=curt_edge;
int ctr_down=curt_edge-1;
int ctr_left=curt_edge-1;
int ctr_up=curt_edge-2;
//write right side
while (ctr_right>0)
{
Matrix[cur_row][cur_col]=cur_value;
cur_col++;
cur_value++;
ctr_right--;
}
//chage to down
cur_row++;
cur_col--;
//write down side
while (ctr_down>0)
{
Matrix[cur_row][cur_col]=cur_value;
cur_row++;
cur_value++;
ctr_down--;
}
//chage to left
cur_col--;
cur_row--;
//write left side
while (ctr_left>0)
{
Matrix[cur_row][cur_col]=cur_value;
cur_col--;
cur_value++;
ctr_left--;
}
//chage to up
cur_row--;
cur_col++;
//write up side
while (ctr_up>0)
{
Matrix[cur_row][cur_col]=cur_value;
cur_row--;
cur_value++;
ctr_up--;
}
//chage to right
cur_col++;
cur_row++;
if (cur_value>max_value)
{
break;
}
curt_edge-=2;
}
//show matrix
int i,j;
for (i=1;i<=start_edge;i++)
{
for (j=1;j<=start_edge;j++)
{
cout<<Matrix[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
int start_edge;
cin>>start_edge;
while (start_edge>0)
{
f(start_edge);
cin>>start_edge;
}
return 0;
}
#include <stdio.h>
#include <string.h>
int a[20][20];
void Translate(int n);
void Output(int n);
int main()
{
int n;
while (printf("Please Input a Num: "),scanf("%d",&n)!=EOF)
{
Translate(n);
Output(n);
printf("\n");
}
return 0;
}
void Translate(int n)
{
int i,j,count=0;
memset(a,0,sizeof(a));
a[i=0][j=0]=++count;
while(count<n*n)
{
while (j+1<n&&a[i][j+1]==0)
{
a[i][++j]=++count;
}
while (i+1<n&&a[i+1][j]==0)
{
a[++i][j]=++count;
}
while (j-1>=0&&a[i][j-1]==0)
{
a[i][--j]=++count;
}
while(i-1>=0&&a[i-1][j]==0)
{
a[--i][j]=++count;
}
}
}
void Output(int n)
{
int i,j;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}
#include<stdio.h>
#include<stdlib.h>
int fun(int * arr,int edge)
{
int i,j,m,n,flag=1; //i为要记录的数字,m为要直走的格数,n是标记直走的次数
n=1;
m=edge;
for(i=1;i<=edge*edge; n++)
{
if(!(n%2)) m--;
if(n%4==1)
for(j=0; j<m;i++,j++)
{ if(flag)
flag=0;
else arr+=edge;
*arr=i;
}
if(n%4==2)
for(j=0;j<m;i++,j++)
{ arr++; *arr=i;}
if(n%4==3)
for(j=0;j<m;i++,j++)
{ arr-=edge; *arr=i;}
if(n%4==0)
for(j=0;j<m;i++,j++)
{ arr--; *arr=i;}
}
return 0;
}
int main()
{
int i,j,edge,*arr;
printf("please enter the edge:");
scanf("%d",&edge);
arr=(int*)calloc(edge,sizeof(int));
fun(arr,edge);
for(i=0; i<edge; i++)
{
for(j=0; j<edge; j++)
printf("%6d",arr[i*edge+j]);
printf("\n\n");
}
return 0;
}