字母图形

问题描述

利用字母可以组成一些美丽的图形,下面给出了一个例子:

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。

本题较容易想到的思路是这样的

由图形可以看出(1)第一行和第一列都是以A为开始,接下来都是BCDEF....

        (2)从第二行开始,每一行从第二位开始,都是上一行右移一位后直接搬下来的

    #include <iostream>  
    using namespace std;  
    //方法一    
    int main()   
    {  
        int n;  
        int m;  
        cin>>n>>m;  
        int array[n][m];//n行m列   
        for(int i=0;i<n;i++)//给第一列赋值65,66,67... 转化为char型即为A,B,C...   
        {  
            array[i][0]=65+i;//A的ASCII码为65  
        }  
        for(int i=0;i<m;i++)//给第一行赋值65,66,67... 转化为char型即为A,B,C...  
        {  
            array[0][i]=65+i;  
        }  
        for(int i=1;i<n;i++)//从第二行开始,每一行从第二位数开始的值都是上一行的右移一位后直接搬下来的   
        {  
            for(int j=1;j<m;j++)  
            {  
                array[i][j]=array[i-1][j-1];  
            }  
        }  
        for(int i=0;i<n;i++)//输出   
        {  
            for(int j=0;j<m;j++)  
            {  
                cout<<(char)array[i][j];//强制转化为char型   
            }  
            cout<<endl;  
        }  
        return 0;  
    }  
方法二:
    #include <iostream>  
    using namespace std;   
    //方法二  
    int main()   
    {  
        unsigned int n,m;  
        cin>>n>>m;  
        int array[n][m];  
        for(int i=0;i<m;i++)//给第一行赋值65,66,67... 转化为char型即为A,B,C...  
        {  
            array[0][i] = i + 65;  
        }  
        for(int i=1;i<n;i++)  
        {     
            for(int j=1;j<m;j++)//从第二行开始,每一行从第二位数开始的值都是上一行的右移一位后直接搬下来的   
            {  
                array[i][j] = array[i-1][j-1];  
            }  
            array[i][0] = array[i-1][0] + 1;//给每一行的第一位赋值   
        }  
        for(int i=0;i<n;i++)//输出   
        {  
            for(int j=0;j<m;j++)  
            {  
                cout<<(char)array[i][j];  
            }  
            cout<<endl;  
        }  
        return 0;  
    }   


但是真正简单的代码是以A为对角线,分别向左向右递增(相当于ASCII码)
    #include <cstdio>  
    #include <iostream>  
    #include <cmath>  
    using namespace std;  
    int main()  
    {  
        int n, m;  
        scanf("%d%d", &n, &m);  
        for(int i = 1; i <= n; i++)  
        {  
            for(int j = 1; j <= m; j++)  
                putchar(abs(i - j) + 'A');  
            putchar(10);//换行的ASCII码为10   
        }  
        return 0;  
    }  


1.abs()函数和fabs函数都是c++标准库<cmath>头文件里面的函数,abs()是求一个整数的绝对值,fabs()是求一个浮点数的绝对值。
2.putchar()和getchar():必须包含<stdio.h>头文件
putchar()是输出一个字符,putchar()里面的参数可以是字符的,也可以是数字,是数字将会被强制转化为char类型,
意思就是数字代表字母的ASCII码。
getchar()是输入一个字符,输入的包含回车换行等字符。

下面是一些详细的解释:

2.    putchar()和getchar()

putchar()

头文件:<stdio.h>

作用:输出一个字符

格式:putchar(c),c为输出的参数


getchar()

头文件:<stdio.h>

作用:输入一个字符

格式: getchar(),没有参数


注意:(1)敲下的字符先暂存在键盘的缓冲器,按了enter键后才会把所有敲下的字符一起输入到计算机,然后按先后顺序分别赋给相应的变量。

            (2)getchar()函数不仅可以从输入设备获得一个可显示的字符,而且可以获得屏幕上无法显示的字符,如控制字符回车换行,空格等。如下图:


上面的程序中,输入A,enter,B,再按enter。其中A将赋给了a,换行符enter将赋给了b,B将赋给了c,最后的enter将敲下的上述字符输入计算机。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值