ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

蓝桥杯经典图形题 —— 打印大X、等腰三角形

2020-06-17 12:05:57  阅读:462  来源: 互联网

标签:... num .. int 打印 .... 等腰三角 蓝桥 .....


打印大X

题目: 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。

要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X

例如,用户输入:
3 9
程序应该输出:

***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***

再例如,用户输入:
4 21
程序应该输出

****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****

代码加注释如下所示:

#include <stdio.h>
#include <math.h>
int main()
{
    int m, n;   // 笔的宽度,X的高度
    scanf("%d%d", &m, &n);
    
    int index = n - 1;  // 第一行后面图形的索引位置 
    int tmp = 0;
    int i, j, k, l;
    
    int flag = -1;
    int ff = 0;
    
    for (i = -(n / 2); i <= n / 2; ++i) // 21 行 
    {
   	for (j = 0; j < n / 2 - abs(i); ++j) 	// 前一半的 .
   	    printf(".");
  	
  	for (k = 0; k < m; ++k)			// . 后面的四个 *
   	    printf("*");
  	
  	for (l = 0; l < index - (j + k); ++l)	// * 后面的 .
   	    printf(".");
  	
  	if (l == 0)		// 两个 "四个*" 开始接触产生的一个小算法
  	{
   	    k = tmp + ff;
   	    
   	    if (i < 0) tmp += 2;
   	    else  tmp -= 2;
   	    
   	    if (ff == 0 && m % 2 == 1)
   	    {
    		k += (m % 2 == 0) ? 2 : 1;
    		ff = (m % 2 == 0) ? 2 : 1;
   	    }
  	}
        
        else k = 0;
    
        for (; k < m; ++k)	// 第二个 "四个*" 到底输出几个 ?
   	    printf("*");
    
    	for (j = 0; j < n / 2 - abs(i); ++j)
   	    printf(".");
  
     	if (i >= 0) flag = 1;
  	    index += flag;
    
    	printf("\n");
    }
   
    return 0;
}

当我们输入 10, 31时,效果如下:
在这里插入图片描述


.

等腰三角形

题目:
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:

  1. 先用1,2,3,…的自然数拼一个足够长的串
  2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
    比如,当三角形高度是8时:
       1
      2 1
     3   8
    4     1
   5       7
  6         1
 7           6
891011121314151

输入,一个正整数n(3<n<300),表示三角形的高度
输出,用数字填充的等腰三角形。

为了便于测评,我们要求空格一律用"."代替。

例如:
输入:
5
程序应该输出:

....1
...2.1
..3...2
.4.....1
567891011

再例如:
输入:
10
程序应该输出:

.........1
........2.2
.......3...2
......4.....2
.....5.......1
....6.........2
...7...........0
..8.............2
.9...............9
1011121314151617181

再例如:
输入:
15

程序应该输出:

..............1
.............2.3
............3...2
...........4.....3
..........5.......1
.........6.........3
........7...........0
.......8.............3
......9...............9
.....1.................2
....0...................8
...1.....................2
..1.......................7
.1.........................2
21314151617181920212223242526

此题我们使用 C++11 标准写(蓝桥杯并不允许,并且使用数组的思想). . .

代码如下:

#include <iostream> 
#include <algorithm>
#include <string>
using namespace std;

int main()
{
    int num;
    cin >> num;   // 输入三角形的高度  
    string str;
  
    for (int i = 1; i < num * num; i++)
  	str += to_string(i);
    
    int arr[500][500] = { 0 }; // 存放三角形 
    int row = 0;     // 第一个元素所在的位置 
    int col = num - 1;
    int tmpR = row, tmpC = col;
    int k = 0;
 
    while (tmpR != num - 1) // 没有到底
    {
   	arr[tmpR][tmpC] = str[k++];
  	++tmpR; --tmpC;
    }
    
    while (tmpC != col * 2)
    {
  	arr[tmpR][tmpC] = str[k++];
  	++tmpC;
    }
    
    while (tmpR != 0)
    { 
  	arr[tmpR][tmpC] = str[k++];
  	--tmpR; --tmpC;
    }
    
    for (int i = 0; i < num; i++)
    {
  	for (int j = num * 2 - 1; j >= 0; j--)
  	{
   	    if (arr[i][j] != 0)
   	    {
    		for (int k = 0; k < j; k++)
    	    	{
     		    if (arr[i][k] == 0)
      			arr[i][k] = '.';
    		}
   	    }
  	}
    }
    
    for (int i = 0; i < num; i++)
    {
  	for (int j = 0; j < num * 2; j++)
   	    cout << (char)arr[i][j];
  	cout << endl;
    }
    
    return 0;
}

当我们输入 30 时,效果如下所示:
在这里插入图片描述


.

浪子花梦

一个有趣的程序员 ~

标签:...,num,..,int,打印,....,等腰三角,蓝桥,.....
来源: https://blog.csdn.net/weixin_42100963/article/details/106787307

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有