给定一个仅包含小写字母的字符串S,用这些字符恰好排成一个n行m列的矩阵(m≥n),请找出所有符合要求的矩阵中最接近于正方形的那个矩阵。然后从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符。
例如:S = "abcdefgh"。按要求m≥n有如下两种矩阵:
第一种:

第二种:

最接近正方形的矩阵是第一种。从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符,结果为: aebfcgdh。
输入格式:
输入一个字符串,仅包含小写字母且长度不超过200。
输出格式:
请找出符合题目要求的最接近正方形的字符矩阵,从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符
输入样例:
在这里给出一组输入。例如:
abcdefgh
输出样例:
在这里给出相应的输出。例如:
aebfcgdh
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
//#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 300
char A[MAX];
int num[MAX] = { 0 };
char B[50][50];
int function(int count);
int main()
{
gets(A);
int count = strlen(A);
int panduan = function(count);
//printf("%d", panduan);
if (panduan == 1||count == 1||count == 2)
{
puts(A);
}
else
{
int th = 0;
for (int i = 2; i <= sqrt(count); i++)
{
if (count % i == 0)
{
num[th] = i;
th++;
}
}
//printf("%d", num[th - 1]);
int p = count / num[th - 1];
//printf("%d\n", p);
for (int i = 0; i < num[th - 1]; i++)
{
for (int j = 0; j < p; j++)
{
B[i][j] = A[j + i * p];
}
//printf("\n");
}
for (int i = 0; i < p; i++)
{
for (int j = 0; j < num[th - 1]; j++)
{
printf("%c", B[j][i]);
}
//printf("\n");
}
}
}
int function(int count)
{
if (count == 1)
return 0;
if (count == 2)
return 1;
for (int i = 2; i <= sqrt(count); i++)
{
if (count % i == 0)
return 0;
}
return 1;
}