天天看點

《算法》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為根坐标開始向兩邊移動 ,接法非常巧妙
#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;
   }
}
      

總結

  • 輸出圖形 是對循環能力的最重要的掌控 ,其中還涉及到了矩陣(旋轉, 乘法,出發等)相關的知識要點。