a*******8 发帖数: 110 | 1 Write a function
void printSquare(int n)
{
}
n = 1, print out
1
n = 2, print out
1 2
4 3
n = 3
1 2 3
8 9 4
7 6 5
n = 4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7 | s*****y 发帖数: 897 | 2 somebody already ask this question in recent one day.
Search ihas1337code post...
【在 a*******8 的大作中提到】 : Write a function : void printSquare(int n) : { : } : n = 1, print out : 1 : n = 2, print out : 1 2 : 4 3 : n = 3
| j*****4 发帖数: 292 | 3 recursion
【在 a*******8 的大作中提到】 : Write a function : void printSquare(int n) : { : } : n = 1, print out : 1 : n = 2, print out : 1 2 : 4 3 : n = 3
| b*****n 发帖数: 482 | 4 定义一个n*n的数组,再把1-n填入数组中,最后打印。
数组初始化为零,每填完一个数k,根据当前的row,col和direction计算下一个数(k+1
)所对应的
row, col和direction(direction是指下一个坐标是往左,下,右,还是往上)。如果
保持当前方
向,而下一个位置为非零(表明已经填过了),或者越界,则转向。
if you need code, let me know.
【在 a*******8 的大作中提到】 : Write a function : void printSquare(int n) : { : } : n = 1, print out : 1 : n = 2, print out : 1 2 : 4 3 : n = 3
| P********l 发帖数: 452 | | f****4 发帖数: 1359 | 6 void printspiral(char *a, int colsize, int m, int n, int x0, int y0)
{
// a is the matrix, colsize is its original column size
// m is #rows, n is #cols in the submatrix
// x0 and y0 are the offsets of the first element of the submatrix
// check if m and n are positive
if (m<=0 || n<=0) {
cout << "zero or negative dimensions" << endl;
return;
}
int i;
if(m>=2&&n>=2) {
// print the outer circle
for(i=0; i<=n-2; i++)
cout << a[x0*colsize+y0+i] << ',';
for(i=0; i<=m-2; i++)
cout << a[(x0+i)*colsize+y0+n-1] << ',';
for(i=n-1; i>=1; i--)
cout << a[(x0+m-1)*colsize+y0+i] << ',';
for(i=m-1; i>=1; i--)
cout << a[(x0+i)*colsize+y0] << ',';
cout << endl;
}
else{
if (m==1&&n==1)
cout<
else
if(m==1)
for(i=0;i
cout<
else
for(i=0;i
cout<
}
// print the inner matrix using recursion
if(m>2 && n>2)
printspiral(a, colsize, m-2, n-2, x0+1, y0+1);
}
void spiral(char* arr,int rowSize,int colSize)
{
if(colSize<=0||rowSize<=0){
cout<<"invalid input"<
return;
}
int m=rowSize,n=colSize,x0=0,y0=0,i;
while(m>=1&&n>=1){
if(m>=2&&n>=2){
for(i=0; i<=n-2; i++)
cout << arr[x0*colSize+y0+i] << ',';
for(i=0; i<=m-2; i++)
cout << arr[(x0+i)*colSize+y0+n-1] << ',';
for(i=n-1; i>=1; i--)
cout << arr[(x0+m-1)*colSize+y0+i] << ',';
for(i=m-1; i>=1; i--)
cout << arr[(x0+i)*colSize+y0] << ',';
cout << endl;
}
else{
if (m==1&&n==1)
cout<
else
if(m==1)
for(i=0;i
cout<
else
for(i=0;i
cout<
}
m-=2; n-=2; x0+=1; y0+=1;
}
} | o****d 发帖数: 2835 | 7 C程序
思路如上面的朋友所说
=======
#include
#include
void setMatrix (int ** matrix, int x, int y, int n, int start)
{
int i,j;
if(n==0)return;
else if(n==1) matrix[x][y]=start;
else{
for(j=y;j
matrix[x][j]=start++;
for(i=x;i
matrix[i][y+n-1]=start++;
for(j=y+n-1;j>y;j--)
matrix[x+n-1][j]=start++;
for(i=x+n-1;i>x;i--)
matrix[i][y]=start++;
setMatrix(matrix,x+1,y+1,n-2,start);
}
}
int main()
{
int i,j;
int **matrix;
int N;
printf("Please input size: ");
scanf("%d", &N);
matrix=(int **)malloc(N*sizeof(int *));
for(i=0;i
matrix[i]=(int *)malloc(N*sizeof(int));
setMatrix(matrix,0,0,N,1);
for(i=0;i
{
for(j=0;j
printf("%4d ", matrix[i][j]);
printf("\n");
}
return 0;
}
+1
【在 b*****n 的大作中提到】 : 定义一个n*n的数组,再把1-n填入数组中,最后打印。 : 数组初始化为零,每填完一个数k,根据当前的row,col和direction计算下一个数(k+1 : )所对应的 : row, col和direction(direction是指下一个坐标是往左,下,右,还是往上)。如果 : 保持当前方 : 向,而下一个位置为非零(表明已经填过了),或者越界,则转向。 : if you need code, let me know.
|
|