66 菱形输出
作者:互联网
问题描述 :
明明这次又碰到问题了:
给定一个正整数N,明明的爸爸让他输出一个以Z开始的菱形,以后依次为Y,X…,
比如当N等于1的时候输出图形:
Z
当N等于2的时候,输出图形:(Y前没有空格,Z、X和W前一个空格)
Z
Y X
W
当N等于3的时候,输出图形(Z前两个空格,Y、X前一个空格,W前没有空格......):
Z
Y X
W V
U T
S
明明发现当N很大的时候就不是很容易了,所以找到了你,希望你编写一个程序帮助他
明明的问题可以归结为:输入一个正整数N,输出一个以Z开始的菱形,以后依次为Y,X…。
请尝试定义函数,该函数的功能是输出以上图形的一行。
输入说明 :
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1≤n≤7)。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组输出一个以Z开始的菱形,具体格式参照样例输出。每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果之后没有空行。 注:通常,显示屏为标准输出设备。
输入范例 :
1
3
输出范例 :
Z
Z
Y X
W V
U T
S
思想:找规律的题目,先打印出来第一行,余下的空格规律为:菱形的上半部分,就是行数不超过目标数num的时候,前面有num-i行个空格,然后打印一个字母,中间有2(i-1)-1个空格,再打印一个字母。
下半部分,中间空格的规律变为有2(2*num-i-1)-1个空格。
#include <stdio.h> #include <stdlib.h> int main() { int num, i, j, k,count; int cur =0; char c[26]; int cr = 90; for(i=0;i<26;i++){ c[i] = cr; cr--; } while(scanf("%d", &num) != EOF) { count = 0; cur++; if (cur >= 2) printf("\n"); for (i = 1; i <= num - 1; i++) { printf(" "); } printf("%c\n", c[count++]); for (i = 2; i <= 2 * num - 2; i++) { if (i <= num) { for (j = 1; j <= num - i; j++) printf(" "); printf("%c", c[count++]); for (j = 1; j <= (2 * (i - 1)) - 1; j++) printf(" "); printf("%c\n", c[count++]); } else { for (j = 1; j <= i - num; j++) printf(" "); printf("%c", c[count++]); for (j = 1; j <= (2 * (2 * num - i - 1)) - 1; j++) printf(" "); printf("%c\n", c[count++]); } } if (num != 1)//最后一行 { for (i = 1; i <= num - 1; i++) { printf(" "); } printf("%c\n", c[count++]); } return 0; } }
标签:输出,num,一组,int,测试数据,空格,菱形,66 来源: https://www.cnblogs.com/End1ess/p/15973386.html