BC8 牛牛的字符菱形
- 题目
- 题解(344)
- 讨论(196)
- 排行
- 面经
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
牛牛尝试用键盘读入一个字符,然后在屏幕上显示用这个字符组成的菱形:对角线长 55 个字符,且倾斜放置。请帮他编写程序输出这个倾斜的菱形。
输入描述:
在一行上输入一个可见字符 cc,且保证其为 ASCII 符号。
输出描述:
输出一共五行,表示你所绘制的倾斜菱形。您可以查看样例得到更具体的说明。
示例1
输入:
#
复制输出:
#
###
#####
###
#
解析:
输入一个字符,输出 5 行:
#
###
#####
###
#
第 1 行:前面 2 个空格 + 1 个字符 第 2 行:前面 1 个空格 + 3 个字符 第 3 行:前面 0 个空格 +5 个字符 第 4 行:前面 1 个空格 +3 个字符 第 5 行:前面 2 个空格 +1 个字符
方法 1:直接 printf 写(简单,适合新手)
#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
printf(" %c\n", c);
printf(" %c%c%c\n", c,c,c);
printf("%c%c%c%c%c\n", c,c,c,c,c);
printf(" %c%c%c\n", c,c,c);
printf(" %c\n", c);
return 0;
}
方法 2:双重 for 循环(考试常用,通用菱形写法)
行号 i 从 0~4 一共 5 行
-
空格数量:
abs(2-i) -
字符数量:
5 - 2*abs(2-i)#include <stdio.h>
#include <stdlib.h> // abs绝对值函数头文件int main()
{
char c;
scanf("%c", &c);int i,j; for(i = 0; i < 5; i++) { int space = abs(2 - i); // 该行要打印多少空格 int ch_cnt = 5 - 2 * space; // 该行要打印多少字符 //打印空格 for(j=0;j<space;j++){ printf(" "); } //打印字符 for(j=0;j<ch_cnt;j++){ printf("%c",c); } printf("\n"); //换行 } return 0;}
方法 3:while 版本(你刚才问的 while 循环写法)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c;
scanf("%c", &c);
int i = 0;
while(i <5)
{
int space = abs(2-i);
int ch_cnt = 5 - 2*space;
int j=0;
while(j < space){
printf(" ");
j++;
}
j=0;
while(j < ch_cnt){
printf("%c",c);
j++;
}
printf("\n");
i++;
}
return 0;
}
运行示例
输入:# 输出:
#
###
#####
###
#
关键点
abs()绝对值函数,需要头文件#include <stdlib.h>- 一共固定 5 行,对角线长度 5;中间第 3 行最多 5 个符号
%c读取字符,别忘了&符号scanf("%c", &c);
面试 / 刷题优先记双重 for 循环版本,如果题目改成 7 行、9 行菱形,只改数字就能复用。