程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [ACM]在命令行以LED樣式顯示輸入的數字

[ACM]在命令行以LED樣式顯示輸入的數字

編輯:C++入門知識

昨天,一個同學和我說了一道ACM題目,說很有趣,於是乎我就聽了他給我介紹了題目的要求:

每行輸入兩個數如下所示:

1        1234567890

輸出:

 

 \


2      1234567890

輸出

 

\
3        1234567890

輸出

 \


我想我圖貼到這裡大家應該知道題目的要求了吧。

 


分析:上面的數字輸出有點想LED數字輸出,不知道大家知不知道LED七段顯示,在我下面的程序中,我就是用到了這個,每一位存儲是否有開啟0表示不開啟,1表示開啟

如下

 

\
上面0-6分別對應於LED的一段,一共有7段,所以我們可以用7bit來分別存儲裡面,0表示無,1表示有

比如 2的LED顯示為

 \


我們可以用下面的二進制表示(從6-0順序)為1011101;同理3的二進制表示為1101101;4的二進制表示為0101110,有了上面的分析,在輸出的時候。只有i = 0\3\6都是表示橫向,其余的表示縱向,他們的輸出是不一樣的。設置了位就輸出相應的標志,沒有設置就輸出空格。代碼如下:


[cpp] 
#include <iostream>  
#include <string>  
#include <vector>  
 
/**
        Author: w397090770
        E-mail:[email protected]
        只用於學習交流,轉載請寫上上面的注釋,謝謝您的厚道。 
*/ 
using namespace std; 
 
char ptr[]  = { 
    //這些數是表示0-9的LED顯示   
    119, 36, 93, 109, 46, 107, 123, 37, 127, 111 
}; 
 
bool getBit(char c, int i){ 
    return c & (1 << i); 

 
int main(){ 
    string num = "1234890"; 
    int n = 3; 
     
    int len = 0; 
    len = num.length(); 
     
    //存上面數字的數字表示   
    vector<char>v; 
    int i = 0; 
    for(i = 0; i < len; i++){ 
        v.push_back(ptr[num[i] - '0']);  
        //cout << (int)v[i] << endl;  
    } 
     
    //是否為橫向   
    bool isH = false; 
    int j = 0, k = 0, l = 0; 
    for(i = 0; i < 7; i++){ 
        //橫向  
        for(j = 0; j < len; j++){ 
            for(k = 0; k < n + 2; k++){ 
                if(i == 0 || i == 3 || i == 6){ 
                    isH = true; 
                }else{ 
                    isH = false; 
                } 
                 
                if(isH && (k == 0 || k == n + 1)){ 
                    cout << "  "; 
                }else if((i == 0 || i == 3 || i == 6) && getBit(v[j], i)){ 
                    cout << "-"; 
                }else if((i == 0 || i == 3 || i == 6) && !getBit(v[j], i)){ 
                    cout << " "; 
                } 
            } 
             
        } 
         
        //豎向   
        for(k = 0; k < n; k++){ 
            for(j = 0; j < len; j++){ 
                if((i == 1 || i == 4) && getBit(v[j], i)){ 
                    cout << " |"; 
                    for(l = 0; l < n; l++){ 
                        cout << " "; 
                    } 
                }else if((i == 1 || i == 4)&& !getBit(v[j], i)){ 
                    cout << "  "; 
                    for(l = 0; l < n; l++){ 
                        cout << " "; 
                    } 
                } 
                if(((i + 1) == 2 || (i + 1) == 5) && getBit(v[j], i + 1)){ 
                    cout << " |"; 
                }else if(((i + 1) == 2 || (i + 1) == 5) && !getBit(v[j], i + 1)){ 
                    cout << "  "; 
                } 
                 
            } 
            if(!isH){ 
                cout << endl; 
            } 
             
        } 
        //已經輸出了,所以需要跳掉   
        if(i == 1 || i == 4){ 
            i++; 
        }else{ 
            cout << endl; 
        } 
    } 
    cout << endl; 
    return 0; 

#include <iostream>
#include <string>
#include <vector>

/**
  Author: w397090770
  E-mail:[email protected]
  只用於學習交流,轉載請寫上上面的注釋,謝謝您的厚道。
*/
using namespace std;

char ptr[]  = {
 //這些數是表示0-9的LED顯示
 119, 36, 93, 109, 46, 107, 123, 37, 127, 111
};

bool getBit(char c, int i){
 return c & (1 << i);
}

int main(){
 string num = "1234890";
 int n = 3;
 
 int len = 0;
 len = num.length();
 
 //存上面數字的數字表示
 vector<char>v;
 int i = 0;
 for(i = 0; i < len; i++){
  v.push_back(ptr[num[i] - '0']);
  //cout << (int)v[i] << endl;
 }
 
 //是否為橫向
 bool isH = false;
 int j = 0, k = 0, l = 0;
 for(i = 0; i < 7; i++){
  //橫向
  for(j = 0; j < len; j++){
   for(k = 0; k < n + 2; k++){
    if(i == 0 || i == 3 || i == 6){
     isH = true;
    }else{
     isH = false;
    }
    
    if(isH && (k == 0 || k == n + 1)){
     cout << "  ";
    }else if((i == 0 || i == 3 || i == 6) && getBit(v[j], i)){
     cout << "-";
    }else if((i == 0 || i == 3 || i == 6) && !getBit(v[j], i)){
     cout << " ";
    }
   }
   
  }
  
  //豎向
  for(k = 0; k < n; k++){
   for(j = 0; j < len; j++){
    if((i == 1 || i == 4) && getBit(v[j], i)){
     cout << " |";
     for(l = 0; l < n; l++){
      cout << " ";
     }
    }else if((i == 1 || i == 4)&& !getBit(v[j], i)){
     cout << "  ";
     for(l = 0; l < n; l++){
      cout << " ";
     }
    }
    if(((i + 1) == 2 || (i + 1) == 5) && getBit(v[j], i + 1)){
     cout << " |";
    }else if(((i + 1) == 2 || (i + 1) == 5) && !getBit(v[j], i + 1)){
     cout << "  ";
    }
    
   }
   if(!isH){
    cout << endl;
   }
   
  }
  //已經輸出了,所以需要跳掉
  if(i == 1 || i == 4){
   i++;
  }else{
   cout << endl;
  }
 }
 cout << endl;
 return 0;
}
輸出:

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved