给定一个仅包含小写字母的字符串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;
}