HDU 1091 空心三角形
2015-07-26 14:48
218 查看
空心三角形
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 120 Accepted Submission(s) : 41
[align=left]Problem Description[/align]
把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。
[align=left]Input[/align]
每行包含一个字符和一个整数n(0<N<41),不同的字符表示不同的花纹,整数N表示等腰三角形的高。显然其底边长为2N-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。 div <>
[align=left]Output[/align]
每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。
[align=left]Sample Input[/align]
X 2 A 7 @
[align=left]Sample Output[/align]
X XXX A A A A A A A A A A A AAAAAAAAAAAAA
[align=left]Author[/align]
qianneng
思路:
找规律题!首先要考虑到前n-1排和第n排不一样,第n排全部输出(总共2*n-1个字符),而前n-1排需要找规律:第一个字符所在的位置为n-(i-1),(其中i代表的是第i行);而第二个字符所在的位置是n+(i-1);(注意:最后一个字符后面没有空格!),除下这两个位置在小于等于n+(i-1)的位置上全是空格!
代码:
#include <stdio.h> #include <string.h> int main() { char a; int b,i,j,k=0; while((a=getchar())!='@')//可换为:while(scanf("%c",&a)&&a!='@') { ++k; getchar();//这一句的作用是读取空格! scanf("%d",&b); getchar();//记住这一句不能省,否则会在第二次输入时a直接变成\n(换行符)! if(k!=1)//这个格式很重要,这是在第一个结果的后面先不输出空行, printf("\n");//只有在判断过第二个结果满足条件后,才输出空行, //此空行依然在第二个结果之前,满足两个空三角形之间有空行的条件! for(i=1;i<b;i++) { for(j=1;j<=b+(i-1);j++) { if(j==b-(i-1)||j==b+(i-1)) printf("%c",a); else printf(" "); } printf("\n"); } for(i=0;i<2*b-1;i++) printf("%c",a); printf("\n"); } return 0; }
相关文章推荐
- 关于重定向和转发的理解
- 周工作总结及计划表
- C# 弹出窗体位置设定
- Least Common Multiple
- 理解JavaScript闭包
- HDU 4576 Robot 概率DP 水题
- 食物链--poj1182
- Java对象的equals方法分析与重写
- python循环语句
- 利用无名对象初始化对象系统不会调用拷贝构造函数
- 九度oj 1064
- Shell下获取系统时间及转换为时间戳的方法
- TCP三次握手 四次挥手
- C++的逆波兰表达式的求解
- Menu 菜单之OptionsMenu
- [多校2015.01.1002 单调队列] hdu 5289 Assignment
- 使用apktool编译以及反编译apk文件
- 已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行,如何解决
- ios定位
- CF 558E(A Simple Task-计数排序+线段树)