螺旋矩阵
分析:基本想法是首先将输入的数字存储在数组中,然后对数组进行递减排序。开一个二位数组,将数字依次填入二位数组中,最后打印二位数组
#include <stdio.h>
#include <string.h>
#include <math.h>
int com(const char *ps1,const char *ps2)
{
int *p1 = (int *)ps1;
int *p2 = (int *)ps2;
return *p2-*p1;
}
int main()
{
int m,n,N,i,j;
scanf("%d",&N);
for(n = sqrt(N);N%n;n--);
m = N/n;
int arr[m][n];
for(i = 0;i<m;i++)
{
for(j = 0;j<n;j++)
{
arr[i][j] = 0;
}
}
int brr[N];
for(i = 0;i<N;i++)
{
scanf("%d",&brr[i]);
}
qsort(brr,N,sizeof(int),com);
int ret = 0;
int k;
i = j = k = 0;
while(k<m*n)
{
arr[i][j] = brr[k];
k++;
switch(ret%4)
{
case 0:
j++;
if(j+1>=n || arr[i][j+1]!=0)
ret++;
break;
case 1:
i++;
if(i+1>=m || arr[i+1][j]!=0)
ret++;
break;
case 2:
j--;
if(j-1>=n || arr[i][j-1]!=0)
ret++;
break;
case 3:
i--;
if(i-1>=m || arr[i-1][j]!=0)
ret++;
break;
}
}
for(i = 0;i<m;i++)
{
for(j = 0;j<n;j++)
{
if(j != 0)
{
printf(" %d",arr[i][j]);
}
else
{
printf("%d",arr[i][j]);
}
}
printf("\n");
}
return 0;
}