输出复杂的菱形(续)

根据上次的帖子改了下,让其更智能

如能更改边框、内填充、外填充、高度、个数

效果如下图:

代码如下所示

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 void DrawRhombus(int totalRhombusHeight, int totalRhombusNum, int maxSpaceNum, int rhombusMiddleLine,char rhombusBorder, char rhombusFill, char rhombusOutFill);
  6 
  7 int main(void){
  8     int totalRhombusHeight;
  9     int totalRhombusNum;
 10     int maxSpaceNum;
 11     int rhombusMiddleLine;
 12     char rhombusBorder;
 13     char rhombusFill;
 14     char rhombusOutFill;
 15     
 16     cout << "Please type the height of rhombus:";
 17     cin >> totalRhombusHeight;
 18     cout << "Please type the numbers of rhombus:";
 19     cin >> totalRhombusNum;
 20     cout << "Please type the border of rhombus:";
 21     cin >> rhombusBorder;
 22     cout << "Please type the fill of rhombus:";
 23     cin >> rhombusFill;
 24     cout << "Please type the out fill of rhombus:";
 25     cin >> rhombusOutFill;
 26     
 27     if(0 == totalRhombusHeight % 2){
 28         cout << "The height of rhombus is wrong, the program will exit.";
 29         return -1;
 30     }
 31     
 32     rhombusMiddleLine = (totalRhombusHeight + 1) / 2;
 33     maxSpaceNum = (rhombusMiddleLine - 1) * 2 - 1;
 34     
 35     if(79 < (maxSpaceNum + 2) * totalRhombusNum){
 36         cout << "Not enough width of line. the program will exit.";
 37         return -1;
 38     }
 39     
 40     
 41     DrawRhombus(totalRhombusHeight, totalRhombusNum, maxSpaceNum, rhombusMiddleLine, rhombusBorder, rhombusFill, rhombusOutFill);
 42     
 43     return 0;
 44 }
 45 
 46 void DrawRhombus(int totalRhombusHeight, int totalRhombusNum, int maxSpaceNum, int rhombusMiddleLine,char rhombusBorder, char rhombusFill, char rhombusOutFill){
 47     int lineNum;
 48     int firstSpace;
 49     int secondSpace;
 50     int maxFirstSpace = rhombusMiddleLine - 1;
 51     int spaceNum = 0;
 52     
 53     for(lineNum = 1; lineNum <= totalRhombusHeight; ++lineNum){
 54         if(lineNum <= rhombusMiddleLine){
 55             //first step of rhombus
 56             for(int nowRhombusNum = 1; nowRhombusNum <= totalRhombusNum; ++nowRhombusNum){
 57                 if(1 == nowRhombusNum){
 58                     for(firstSpace = 1; firstSpace <= rhombusMiddleLine - lineNum; ++firstSpace){
 59                         cout << rhombusOutFill;
 60                         spaceNum++;
 61                     }
 62                     cout << rhombusBorder;
 63                     spaceNum++;
 64                 } else {
 65                     for(firstSpace = 1; firstSpace <= (rhombusMiddleLine - lineNum) * 2; ++firstSpace){
 66                         cout << rhombusOutFill;
 67                         spaceNum++;
 68                     }
 69                     cout << rhombusBorder;
 70                     spaceNum++;
 71                 }
 72                 
 73                 if(lineNum > 1){
 74                     for(secondSpace = 1; secondSpace <= (lineNum - 1) * 2 - 1; ++secondSpace){
 75                         cout << rhombusFill;
 76                         spaceNum++;
 77                     }
 78                     cout << rhombusBorder;
 79                     spaceNum++;
 80                 }
 81             }
 82         } else {
 83             //second step of rhombus
 84             for(int nowRhombusNum = 1; nowRhombusNum <= totalRhombusNum; ++nowRhombusNum){
 85                 if(1 == nowRhombusNum){
 86                     for(firstSpace = 1; firstSpace <= lineNum - rhombusMiddleLine; ++firstSpace){
 87                         cout << rhombusOutFill;
 88                         spaceNum++;
 89                     }
 90                     cout << rhombusBorder;
 91                     spaceNum++;
 92                 } else {
 93                     for(firstSpace = 1; firstSpace <= (lineNum - rhombusMiddleLine) * 2; ++firstSpace){
 94                         cout << rhombusOutFill;
 95                         spaceNum++;
 96                     }
 97                     cout << rhombusBorder;
 98                     spaceNum++;
 99                 }
100                 
101                 if(lineNum != totalRhombusHeight){
102                     for(secondSpace = 1; secondSpace <= maxSpaceNum - (lineNum - rhombusMiddleLine) * 2; ++secondSpace){
103                         cout << rhombusFill;
104                         spaceNum++;
105                     }
106                     cout << rhombusBorder;
107                     spaceNum++;
108                 }
109             }
110         }
111         
112         for(int nowSpaceNum = spaceNum; nowSpaceNum < 79; ++nowSpaceNum){
113             cout << rhombusOutFill;
114         }
115         spaceNum = 0;
116         
117         cout << endl;
118     }
119 }
原文地址:https://www.cnblogs.com/xiangsoft/p/2490913.html