【蓝桥杯 C++】 基础练习 字母图形 及其 补充练习

资源限制

时间限制:1.0s 内存限制:256.0MB

_____________________________________________________________________________

问题描述

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

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

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

_____________________________________________________________________________

输入格式

输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。

_____________________________________________________________________________

输出格式

输出n行,每个m个字符,为你的图形。

_____________________________________________________________________________

样例输入

5 7

_____________________________________________________________________________

样例输出

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

_____________________________________________________________________________

数据规模与约定

1 <= n, m <= 26。

代码如下:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,m;
    cin >> n >> m ;
    for(int i = 0; i < n; i++)
    {
        int coun = 1;//计算每一行的字母的数量;
        //逆序输出字母;
        for(int k = 65+i; k > 65 && coun <= m; k--)//最多输出到‘B’,如果有‘A’交给正序输出;
        {
            cout << char(k);
            ++coun;
        }
        //正序输出字母;
        if(coun <= m)//判断该行还有没有空余位置;
        for(int j = 65; coun <= m; j++)//将m作为限制即可;
        {
            cout << char(j);
            coun++;
        }
        if(i != n-1)
        cout << endl;
    }
}

总结:这个题目就是用到了一个int到char的强制类型转换,结合ascii码的知识(A~Z :65~90;a~z:97~122),将输出分为正序字母输出和逆序字母输出就可以解题了。

补充练习:

(ps:说白了就是第一次做的时候题没看清楚,自己增加了一个限制条件,自己挖坑给自己跳)

题目如下:

问题描述

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

ABC
BAB
CBA
BAB
ABC
BAB
CBA

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

_____________________________________________________________________________

输入格式

输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。

_____________________________________________________________________________

输出格式

输出n行,每个m个字符,为你的图形。

_____________________________________________________________________________

样例输入

7 3

_____________________________________________________________________________

样例输出

ABC
BAB
CBA
BAB
ABC
BAB
CBA

_____________________________________________________________________________

数据规模与约定

1 <= n, m <= 26。

其他的和上述题目都一样,但是在整个字母图形中可以使用的字母只有m个(从A开始计算),在A到最后一个位置的时候开始往回移动,其实在 n == m 和 n < m 的情况下两种输出结果是没有差别的,但是在n > m 的情况下就是有差别的。

将字母图形按照A往左下移动和A往右下移动分组,分别描绘每组的字母图即可解题。为了保证每一组的行数相同,每一组的行数需要有m-1行(有头无尾)。

代码如下:

#include<bits/stdc++.h>
using namespace std;

int main()
{
     int n,m;
     cin >> n >> m;
     for(int i = 0; i < n; i++)//总行数;
     {
     int t = i%(m-1)+1;//计算行数对应分组中的哪一行;
     if((i/(m-1)+1)%2 != 0)//A向右下方移动的奇数分组;
     {
           for(int j = t+64; j > 65; j--)//字母的逆序输出,不含A;
           {
              cout << char(j);
           }
           for(int k = 65; k <= 65+m-t; k++)//字母的正序输出含A;
           {
               cout << char(k);
           }
           if( i != n-1)
              cout << endl;
     }
     else
     {
         for(int j = 65+m-(t%m); j >= 65; j--)//逆序输出,含有A;
         {
             cout << char(j);
         }
         for(int k = 66; k < 65+(t%m) ; k++)//顺序输出,不含A;
         {
             cout << char(k);
         }
         if( i != n-1)
            cout << endl;
      }
     }

     return 0;
}

由于补充练习没有平台提交,我试了多组样例都没有问题,如果那里有错误,还希望大佬们及时指出,我一定虚心采纳。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值