1050.らせん行列(25)

4736 ワード

本題では,与えられたN個の正の整数を非増分順に「螺旋行列」に埋め込むことを要求する.「ヘリカルマトリクス」とは、左上隅の1番目の格子から、時計回りにヘリカル方向に塗りつぶすことです.要求マトリクスの規模はm行n列で、条件を満たす:m*nはNに等しい;m>=n;m−nは、可能なすべての値の最小値をとる.
入力形式:
入力は、1行目に正の整数Nを与え、2行目にN個の充填される正の整数を与える.すべての数字は104を超えず、隣接する数字はスペースで区切られています.
出力フォーマット:
スパイラル行列を出力します.各行n個の数字、共m行.隣接する数字は1つのスペースで区切られており、行末に余分なスペースがないようにしてください.
入力サンプル:12 37 7620 98 7642 53 95 60 81 58 93出力サンプル:98 95 93 42 37 81 53 76
【コード】:
#include 
#include 
int cmp(const void *a,const void *b){
  return *(int*)b > *(int*)a;
}
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
  int N=0;int i=0,a,m=0,n=0;
  int *num;
  scanf("%d",&N);
  num = malloc(sizeof(int)*(N+1));
  if(N!=0){
  for(i=1;i*ifor(;N%i!=0;i++);
  m=i;
  n=N/m;
  }
 /* int(*p)[m+1];
    p=(int(*)[m+1])malloc((n+1)*(m+1)*sizeof(int));*/
  int (*put_out)[m+1];
  put_out=(int(*)[m+1])malloc((n+1)*(m+1)*sizeof(int));
  for(i=0;i///
    scanf("%d",&a);
    num[i]=a;
}
 qsort(num,N,sizeof(num[0]),cmp);       

  int k=0,j=0,tag_n=0,tag_m=0;          
  put_out[i=0][0]=num[0];
  while(k+1while(j+11while(i+11while(j-1>=0+tag_n && k+1while(i-1>0+tag_m && k+1int first=1;
  for(i=0;i1;
    for(j=0;jif(first){
      printf("%d",put_out[i][j]);
        first=0;
      }
      else 
        printf(" %d",put_out[i][j]);
    }if(i+1!=m)
    printf("
"
); } return 0; }