Children's Day.

Today is Children’s Day. Some children ask you to output a big letter ‘N’. ‘N’ is constituted by two vertical linesand one diagonal. Each pixel of this letter is a character orderly. No tail blank is allowed.
For example, this is a big ‘N’ start with ‘a’ and it’s size is 3.

a e
bdf
c g

Your task is to write different ‘N’ from size 3 to size 10. The pixel character used is from ‘a’ to ‘z’ continuously and periodic(‘a’ is reused after ‘z’).

Input
This problem has no input.

Output
Output different ‘N’ from size 3 to size 10. There is no blank line among output.

Sample Output
[pre]
a e
bdf
c g
h n
i mo
jl p
k q
………
r j
[/pre]

Hint
Not all the resultsare listed in the sample. There are just some lines. The ellipsis expresseswhat you should write.

题意:用小写字母从画长度为3的倒N一直画到长度为10的倒N。(长度为 n 的倒N就先记成case n )
先来看看怎么画倒N:
O  O
O OO
OO O
O  O
对于这个case 4 的倒N,那么我就可以从定义一个数组用来存要输出的字母,然后最上面的开始,先向下移动3次,然后想右上方移动3次,然后在向下移动三次。每次移动的时候要输出的字母序号都+1。(在两个N之间字母序号也要+1)。

这样正好就有三个方向 可以表示为:
(i+1,j+0)
(i-1,j+1)
(i+1,j+0)

然后按着这些方向走,走三次,就可以画出一个倒N。
接着对于每一个case的倒N,存一次输出一次就可以了。
代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j;
    char cha[26]={0};       //用来存字母 
    char a[100][100]={0};   //用来输出字母 

    int x_move[3]={1,-1,1}; //记录 i 移动的方向
    int y_move[3]={0,1,0};  //记录 j 移动的方向

    for(i=0; i<26; i++)     //存字母 
        cha[i]=i+'a';               

    int ca=3;               //表示第 case 个倒 N 
    int time=0;             //用来存 cha[] 中第 time 个字母
    int z;
    for(ca=3; ca<=10; ca++)
    {
        int turn=0;             //turn用来控制数组移动的方向 
        i=0;
        j=0;
        while(turn!=3)          //转了三次弯以后表示倒 N 已经画完 
        {
            for(z=1; z<=ca; z++)        //对于每个ca的倒 N 每次转弯需要存 ca 个字母 
            {
                a[i][j]=cha[time];      //将第 time 个字母存进 a[][] 中 
                if(z!=ca)               //在倒 N 的最左下和最右上两个地方 数组不移动 
                {
                    i+=x_move[turn];
                    j+=y_move[turn];
                    time++;
                    if(time==26)        //cha[]超过 'z' 时返回 'a'
                        time=0;
                }
            }
            turn++; 
        }
        time++;                         //为下一个倒 N 的第一个字母做准备 
        if(time==26)                    //cha[]超过 'z' 时返回 'a'
            time=0;

        int i_,j_;
        for(i_=0; i_<ca; i_++)          //输出倒 N 型字母 
        {
            for(j_=0; j_<ca; j_++)
            {
                if(a[i_][j_])
                    printf("%c",a[i_][j_]);
                else
                    printf(" ");
            }
        printf("\n");
        }
        memset(a, 0, sizeof(a));
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值