资源限制
时间限制: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;
}
由于补充练习没有平台提交,我试了多组样例都没有问题,如果那里有错误,还希望大佬们及时指出,我一定虚心采纳。