《算法》C/C++ 图形处理
2023-09-11 14:17:19 时间
概述
- 一般图形输出无法就是用循环输出 ,提前构造好图形。
- 两种方式
** 模拟法直接输出**
** 二维数组 构造输出**
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
解法一 直接输出 模拟法
#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为根坐标开始向两边移动 ,接法非常巧妙
#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;
}
}
总结
- 输出图形 是对循环能力的最重要的掌控 ,其中还涉及到了矩阵(旋转, 乘法,出发等)相关的知识要点。
相关文章
- c++从文件路径获取目录
- Win系列:VC++编写自定义组件
- c++与java中子类中调用父类成员的方法
- C++primer习题--第3章
- BottomupSort算法 c++代码实现
- 【思特奇杯·云上蓝桥-算法训练营】第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题
- C++11 用next_permutation算法计算排列组合数
- 机器学习笔记 基于tensorflow2.0的手写数字识别,并导出pb模型供OpenCV的C++版本的DNN模块调用
- Open3D (C++) 最小生成树用于法向量定向
- Open3D(C++) 模型精细化处理—— SubdivideMidpoint剖分
- Open3D (C++)球旋转算法(BPA)三维建模
- paip.提升用户体验-------在C++ Builder 中为Form窗体添加背景图片
- 【C++竞赛 B】yyy的回文数组
- VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
- C++学习心得与c语言到c++衔接技巧
- c++实现快速排序算法
- c++ vs2015编译zlib及使用
- C++ primer札记10-继承
- 手写一个c++的 Iterator
- c++ clr编译dll在c#调用时出现“试图加载不正确的格式”“找不到dll”错误的解决
- 基于新版OpenCV5(C++)+OpenVINO Toolkit案例算法模型示例使用(一条语义分割与目标检测示例搞懂OpenVINO模型部署机制)
- c++ const 类型检查
- C++11/14高速上手手册(三十六)
- C++ STL源代码学习之算法篇
- C++11 指针成员与拷贝构造(浅拷贝与深拷贝)
- 【TDengine】一篇文章了解 C++ 操作 TDengine(详解)
- 【C++】算法集锦(2):递归精讲
- C++搭建集群聊天室(八):网络层代码与业务层代码(登录注册)解耦
- 【强力推荐】基于Nvidia-Docker-Linux(Ubuntu18.04)平台:新版OpenCV5.x(C++)联合CUDA11.1(GPU)完美配置视觉算法开发环境