本文最后更新于41 天前,其中的信息可能已经过时,如有错误请发送邮件到suzhech@gmail.com
题目描述
请你根据以下规则,输出由 * 组成的由八位数字组成的日期图案。
每个数字的横向宽度为 k,纵向高度为 2k−1。各数字的构成如下:
- 数字0
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
* - 左侧竖线:第 2 至 2k−2 行,第 1 列均为
* - 右侧竖线:第 2 至 2k−2 行,第 k 列均为
* - 中间斜线:第 2 至 k−1 列,一个垂直居中由
*组成斜率为 1 的斜线
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字1
- 单竖线:从第 1 行到第 2k−1 行,如果 k 为奇数,则仅第 k2 列有
*,如果 k 为偶数,则仅第 k+12 列有*。
- 单竖线:从第 1 行到第 2k−1 行,如果 k 为奇数,则仅第 k2 列有
- 数字2
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 右侧竖线:第 2 至 k 行,第 k 列有
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 左侧竖线:第 k+1 至 2k−2 行,第 1 列有
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
*
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字3
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 右侧竖线:第 2 至 2k−1 行,第 k 列有
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
*
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字4
- 左侧竖线:第 1 至 k 行,第 1 列有
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 右侧竖线-上段:第 1 至 k 行,第 k 列有
* - 右侧竖线-下段:第 k 至 2k−1 行,第 k 列有
*
- 左侧竖线:第 1 至 k 行,第 1 列有
- 数字5
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 左侧竖线:第 2 至 k−1 行,第 1 列有
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 右侧竖线:第 k+1 至 2k−2 行,第 k 列有
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
*
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字6
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 左侧竖线:第 2 至 2k−2 行,第 1 列有
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 右侧竖线:第 k 至 2k−2 行,第 k 列有
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
*
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字7
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 倾斜竖线整体规则:从第 2 行到第 2k−1 行,竖线斜率为 2 ,即每向下 2 行,向左偏移 1 列
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字8
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 左侧竖线:第 2 至 2k−2 行,第 1 列有
* - 右侧竖线:第 2 至 2k−2 行,第 k 列有
*
- 顶部横线:第 1 行,第 1 至 k 列均为
- 数字9
- 顶部横线:第 1 行,第 1 至 k 列均为
* - 中间横线:第 k 行,第 1 至 k 列均为
* - 底部横线:第 2k−1 行,第 1 至 k 列均为
* - 右侧竖线:第 2 至 2k−2 行,第 k 列有
* - 左侧竖线:第 2 至 k 行,第 1 列有
*
- 顶部横线:第 1 行,第 1 至 k 列均为
输入
共两行,第一行一个八位日期,第二行一个奇数 k,k≥3,表示每个数字的横向宽度。
输出
由 * 组成的日期字符画图案。每个数字之间用两个空格分开。
题解
#include<stdio.h>
void print(int n, int k, int l)
{
switch (n)
{
case 0:
if (l == 1 || l == 2 * k - 1)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else if (l >= 2 && l <= 2 * k - 2)
{
printf("*");
for (int i = 2; i <= k - 1; i++)
{
if (-i + (3 * k + 1) / 2 == l)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("*");
}
break;
case 1:
for (int i = 1; i <= k; i++)
{
if (i == (k + 1) / 2)
{
printf("*");
}
else
{
printf(" ");
}
}
break;
case 2:
if (l == 1 || l == 2 * k - 1 || l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else if (l >= 2 && l <= k)
{
for (int i = 1; i < k; i++)
{
printf(" ");
}
printf("*");
}
else if (l >= k + 1 && l <= 2 * k - 1)
{
printf("*");
for (int i = 2; i <= k; i++)
{
printf(" ");
}
}
break;
case 3:
if (l == 1 || l == 2 * k - 1 || l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else
{
for (int i = 1; i < k; i++)
{
printf(" ");
}
printf("*");
}
break;
case 4:
if (l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else if (l >= k + 1 && l <= 2 * k - 1)
{
for (int i = 2; i <= k; i++)
{
printf(" ");
}
printf("*");
}
else
{
printf("*");
for (int i = 2; i < k; i++)
{
printf(" ");
}
printf("*");
}
break;
case 5:
if (l == 1 || l == 2 * k - 1 || l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else if (l >= 2 && l <= k)
{
printf("*");
for (int i = 2; i <= k; i++)
{
printf(" ");
}
}
else if (l >= k + 1 && l <= 2 * k - 1)
{
for (int i = 1; i < k; i++)
{
printf(" ");
}
printf("*");
}
break;
case 6:
if (l == 1 || l == 2 * k - 1 || l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else if (l >= 2 && l <= k)
{
printf("*");
for (int i = 2; i <= k; i++)
{
printf(" ");
}
}
else if (l >= k + 1 && l <= 2 * k - 1)
{
printf("*");
for (int i = 2; i < k; i++)
{
printf(" ");
}
printf("*");
}
break;
case 7:
if (l == 1)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else
{
for (int i = 1; i <= k; i++)
{
if (l / 2 == k - i + 1)
{
printf("*");
}
else
{
printf(" ");
}
}
}
break;
case 8:
if (l == 1 || l == 2 * k - 1 || l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else
{
printf("*");
for (int i = 2; i < k; i++)
{
printf(" ");
}
printf("*");
}
break;
case 9:
if (l == 1 || l == 2 * k - 1 || l == k)
{
for (int i = 1; i <= k; i++)
{
printf("*");
}
}
else if (l >= 2 && l <= k)
{
printf("*");
for (int i = 2; i < k; i++)
{
printf(" ");
}
printf("*");
}
else if (l >= k + 1 && l <= 2 * k - 1)
{
for (int i = 1; i < k; i++)
{
printf(" ");
}
printf("*");
}
}
}
int main()
{
int d[8];
for (int i = 0; i < 8; i++)
{
scanf("%1d", &d[i]);
}
int k;
scanf("%d", &k);
for (int l = 1; l <= 2 * k - 1; l++)
{
for (int i = 0; i < 8; i++)
{
print(d[i], k, l);
if (i != 7)
{
printf(" ");
}
}
printf("\n");
}
return 0;
}