填充立方体(10分)
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
期中考试小南设计的填数游戏非常有意思,于是老师要小南再设计一个新的填数游戏用于期末考试。就是用“*”画出一个立方体,并将立方体图形的三面分别按照规律填上大写字母“A”“Z”字母、小写字母“a”“z”和数字“1”~“9”。填充的过程按照字母和数字的顺序从上到下从左至右进行。
立方体的边长n定为多少好呢?小南让老师给出一个句子,将句子的长度len和句子中单词的个数m的最大公约数设定为立方体的边长n。例如:当老师给出的句子为“you like these things sun stars and moon”时,句子长度len为40,单词个数m为8,最大公约数为8。因此立方体的边长n为8,对应的图形为:
注意,当n为1时,对应的立方体图形为一个星号*。同时,老师要求小南将句子中的单词颠倒顺序输出,即输出“moon and stars sun things these like you”,你能帮小南编程实现吗?
输入
多个样例。 每个样例包含一个由字母组成的句子,句子的首尾没有多余的空格,长度不超过200,句子中的单词之间用一个空格分开。
输出
每个样例首先输出一个颠倒单词顺序的句子,然后按照填充要求输出一个正确的立方体图形。样例输出结果之间用一个空行分开。
样例输入 Copy
I do
you like these things sun stars and moon
you love csu
样例输出 Copy
do I
**
**
moon and stars sun things these like you
********
ABCDEF*
GHIJKL1*
MNOPQR23*
STUVWX456*
YZABCD7891*
EFGHIJ23456*
*789123
abcdef45678
ghijkl9123
mnopqr456
stuvwx78
yzabcd9
efghij
csu love you
A*
*1
a
int findGCD(int a, int b)
{
int ans = 0;
while (ans = a % b)
{
a = b;
b = ans;
}
return b;
}
#include<stdio.h>
#include<string.h>
int main(void)
{
while (1)
{ char arr[1000][1000] = { 0 };
int i, len = 0;
for (i = 0; i < 100; i++)
{
if (scanf("%s", arr[i]) == EOF)
{
return 0;
};
len += strlen(arr[i]);
char ch = getchar();
if (ch == '\n')
{
break;
}
len++;
}
for (int m = i; m> 0; m--)
{
printf("%s ", arr[m]);
}
printf("%s\n", arr[0]);
int n = findGCD(len, i + 1);
if (n == 1)
{
printf("*\n\n");
continue;
}
//rhe first row
for (int i = 1; i <= n - 1; i++)
{
printf(" ");
}
for (int i = 1; i <= n; i++)
{
printf("*");
}
printf("\n");
char daxie = 'A';
int integer = 1;
for (int i = n - 2; i >= 1; i--)
{
for (int m = 1; m <= i; m++)
{
printf(" ");
}
printf("*");
for (int m = 1; m <= n - 2; m++)
{
if (daxie == 'Z'+1)
daxie = 'A';
printf("%c", daxie++);
}
printf("*");
for (int m = 1; m <= n - 2 - i; m++)
{
if (integer == 10)
integer = 1;
printf("%d", integer);
integer++;
}
printf("*\n");
}
for (int i = 1; i <= n; i++)
{
printf("*");
}
for (int i = 1; i <= n - 2; i++)
{
if (integer == 10)
integer = 1;
printf("%d", integer);
integer++;
}
printf("*\n");
char xiaoxie = 'a';
for (int i = n - 3; i >= 0; i--)
{
printf("*");
for (int m = 1; m <= n - 2; m++)
{
if (xiaoxie == 'z' + 1)
xiaoxie = 'a';
printf("%c", xiaoxie++);
}
printf("*");
for (int m = 1; m <= i; m++)
{
if (integer == 10)
integer = 1;
printf("%d", integer);
integer++;
}
printf("*\n");
}
for (int i = 1; i <= n; i++)
{
printf("*");
}
printf("\n\n");
}
return 0;
}