0
点赞
收藏
分享

微信扫一扫

《算法》C/C++ 图形处理

概述

  • 一般图形输出无法就是用循环输出 ,提前构造好图形。
  • 两种方式

** 模拟法直接输出**
** 二维数组 构造输出**

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

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

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

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

  • 题目地址:​​http://lx.lanqiao.cn/problem.page?gpid=T7​​
  • 代码

解法一 直接输出 模拟法

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
string src="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int length=src.length();
int n,m,j=0;string sum;string temp;
cin>>n>>m;
int k=m;
for(int i=0;i<n;i++){
sum="";
for(j=0;j<k;j++){
sum+=src[j];
}
k--;
if(i!=0){
temp+=src[i];
}
reverse(temp.begin(),temp.end());
cout<<temp+sum<<endl;
reverse(temp.begin(),temp.end());
}
}

解法二 二维数组 直接输出


#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为根坐标开始向两边移动 ,接法非常巧妙

《算法》C/C++ 图形处理_#include


#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int n,m;
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<(char)(fabs(j-i)+'A');
}
cout<<endl;
}
}

总结

  • 输出图形 是对循环能力的最重要的掌控 ,其中还涉及到了矩阵(旋转, 乘法,出发等)相关的知识要点。



举报

相关推荐

0 条评论