码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-18 18:55:59      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:out   gpo   down   包含   log   9.png   技术   sync   sig   

概述

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

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

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

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/C++ 图形处理

标签:out   gpo   down   包含   log   9.png   技术   sync   sig   

原文地址:http://www.cnblogs.com/dgwblog/p/8057990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!