3.3 图形输出
3.3 图形输出
http://codeup.cn/contest.php?cid=100000577
B Hello World for U

题目释义
给出一个长度为N字符串,将它按照U型输出。
设左边竖的一列为n1,右边竖的一列为n3,底部一排为n2,要求n1 = n3 = max { k| k <= n2 for all 3 <= n2 <= N } 且n1 + n2 + n3 - 2 = N。
以样例为例,输入Helloworld!,N=11,n1=hell,n2=lowor,n3=rld!
错误思路
做题时以为n2是不确定的,n1 = n3 = max { k| k <= n2 for all 3 <= n2 <= N } 表示k小于3 <= n2 <= N中所有n2的取值,所以认为n1=n3=3。
但题目的意思是n2可能的取值为[3, N],n2在某个字符串情况下是确定的,k为max{ k | k<=n2 }
题目解析
n1 + n2 + n3 - 2 = N。
n1 = n3 = max { k| k <= n2 }。即要让n1与n3尽可能大,则n1=n3=n2=(N+2)/3;
则得到字符串str时即可求出n1,n2,n3。
需按照每行输出,则每次需输出 str[i] 与 str[N-1-i] 以及二者之间的空格,最后输出底部的字母n3。
设side=n1=n2=n3=(N+2)/3,则之间的空格strip=n3-2=N-n1-n2=N-2*side。
前side-1次输出 str[i] 与 str[N-1-i] 以及二者之间的空格strip,最后输出n3。
代码
#include <cstdio>
#include <cstring>
#define MAX 100
int main() {
char str[MAX];
while (scanf("%s", str) != EOF) {
int len = strlen(str);
int side, strip;
side = (len + 2) / 3;
strip = len - 2 * side;
for (int i = 0; i < side - 1; i++) {
printf("%c", str[i]);
for (int j = 0; j < strip; j++)
printf(" ");
printf("%c\n", str[len - 1 - i]);
}
for (int i = side - 1; i < side + strip + 1; i++) {
printf("%c", str[i]);
}
}
return 0;
}
D 沙漏图形

代码
#include <cstdio>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for (int i=0;i<n;i++){
for (int j=0;j<i;j++) printf(" ");
for (int j=0;j<n-i;j++) printf("* ");
printf("\n");
}
for (int i=1;i<n;i++){
for (int j=0;j<n-i-1;j++) printf(" ");
for (int j=0;j<i+1;j++) printf("* ");
printf("\n");
}
}
return 0;
}
本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/14541160.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步