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
【コード】:
入力形式:
入力は、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;
}