7-1 打印沙漏

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印





所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *
输出样例:





2
编码

include<stdio.h>

int main() {
int a[105];
a[1] = 1;
for(int i = 2; i <= 30; i++)
a[i] = a[i-1] + 2(2i-1);
int n, m, c = 0;
char ch;
scanf("%d %c", &n, &ch);
for(int i = 1; i <= 30; i++) {
if(a[i] == n) {
m = i;
break;
}
else if(a[i] > n) {
m = i-1;
c = n - a[m];
break;
}
}
for(int i = m; i >= 1; i--) {
for(int j = m; j > i; j--)
printf(" ");
for(int j = 1; j <= 2i-1; j++)
printf("%c", ch);
printf("\n");
}
for(int i = 2; i <= m; i++) {
for(int j = m; j > i; j--)
printf(" ");
for(int j = 1; j <= 2
i-1; j++)
printf("%c", ch);
printf("\n");
}
printf("%d\n", c);
}
第一步:编译预处理命令,输入主函数。
第二步:定义整型函数变量,并赋值。
第三步:定义字符型函数变量。
第四步:调用scanf语句接收变量number和ch。
第五步:输入do-while语句,在其中嵌套if语句判断number>=temp?判断数字number是否可以打印沙漏,再利用if语句判断给定的数字number是否可以打印下一个更大的沙漏,再输入break语句,如果不符合条件,则跳出循环打印沙漏。
第六步:如果符合条件,则进入下步循环。
第七步:如果给出的数比下个更大的沙漏图形所需的符号数还要大,则将其的行数变为下个沙漏图形的行数,再进行下次循环,输入else语句。
第八步:输入数据递加,最后输出

posted @ 2019-02-19 16:22  阿园吖  阅读(304)  评论(0编辑  收藏  举报