您的位置:首页 > 其它

HDU-#4706 Children's Day(模拟)

2014-09-06 10:48 435 查看
题目大意:用小写字母输出3至10层的图形,该图形由第一列、最后一列以及对角线构成,要求字符输出是有序的,按照第一列和最后一列从上到下,中间从左到右的顺序。

解题思路:直接就模拟,主要是对下标的控制。解法就是分为三部分,然后每部分枚举下标就可以知道规律,然后进行控制输出即可。注意每一块之间是衔接的,因此要每次输出一块后,要计算下一块的第一个字符的下标。详见code。

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4706

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int n=0,m=0;
char str[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

int main(){
for(int i=3;i<=10;i++){
for(int j=1;j<=i;j++){
for(int k=1;k<=i;k++){
if(k==i) { //最后一列
n=2*i+j-3+m;
while(n>=26) n-=26;
printf("%c",str
);
}
else if(k==i-j+1 && k!=1){ //中间对角线
n=i+k-2+m;
while(n>=26) n-=26;
printf("%c",str
);
}
else if(k==1) { //第一列
n=j-1+m;
while(n>=26) n-=26;
printf("%c",str
);
}
else printf(" ");
}
printf("\n");
}
m+=3*(i-1)+1;//控制每一个n的第一个字母下标增量
while(n>=26) n-=26;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: