特朗普画像

news2025/4/7 7:29:15

任务内容

Description

特朗普当选了,网上流传着很多段子,也出了特朗普的头像。有人说,特朗普 的头像像一团云。所以今年马云去了美国和特朗普谈中美企业的发展。那么你能帮 忙打印出特朗普的头像吗? 抽象派认为,特朗普的头像上半部分可以由一些*组成。由上下对称的两个梯形 组成,梯形每一层之间相差1个星号。告诉你梯形的上边星号,梯形层数,你能打印 出来吗?。

Input

多组测试,输入2个整数,分别是梯形的上边星号,梯形层数

Output

输出头像。

解题思路详细解释

  1. 整体思路概述
    • 本题要求根据输入的梯形上边星号数量和梯形层数,动态生成并输出一个类似抽象派描述的特朗普头像上半部分(由上下对称的两个梯形组成)的图案。程序通过多个步骤,先绘制图案上半部分,再依据上半部分生成下半部分,最后输出整个图案,并在每次完成输出后清理用于存储图案的数组,以准备处理下一组输入数据。
  2. 变量定义部分
    • 定义了多个整型变量,ij主要用于在各种嵌套循环中控制行和列的计数,n用于接收输入的梯形上边星号数量,m用于接收梯形层数,这两个变量决定了图案的形状特征。p变量用于在绘制图案上半部分时控制每行中空格的数量,实现梯形逐渐变宽的效果,u变量则在绘制图案下半部分时,辅助定位要复制的上半部分图案对应的行,以保证下半部分与上半部分对称。
  3. 图案上半部分绘制部分
    • 首先将p初始化为m - 1,意味着最初每行前面的空格数量是梯形层数减 1,随着行数增加,空格逐渐减少,星号逐渐增多,形成梯形形状。
    • 通过外层for循环控制行数(从第 0 行到第m - 1行),对于每一行,内层for循环控制列数(从第 0 列到第n + m - 1列),根据当前列位置与空格数量p的比较,决定在二维字符数组a对应的位置填充空格(a[i][j] = ' ')还是星号(a[i][j] = '*'),每绘制完一行后,p减 1,使得下一行的星号更靠右,逐步构建出上半部分的梯形图案。
  4. 图案下半部分绘制部分
    • 先将u初始化为m - 2,因为要从图案上半部分倒数第二行开始,将其内容复制到下半部分与之对称的位置,以实现上下对称的效果。
    • 通过外层for循环控制行数(从第m行到第2 * m - 1行),对于每一行,内层for循环利用strcpy函数将上半部分对应行(由u控制)的内容复制到当前行(strcpy(a[i], a[u])),每复制完一行,u减 1,向上半部分更靠上的行获取内容进行复制,这样就构建出了与上半部分对称的下半部分梯形图案。
  5. 图案输出部分
    • 通过两层嵌套的for循环,外层循环控制行数(从第 0 行到第2 * m - 1行),内层循环控制列数(从第 0 列到第n + m - 1列),使用printf函数逐个输出二维字符数组a中存储的字符(printf("%c", a[i][j])),每输出完一行后,通过printf("\n")进行换行操作,从而将整个上下对称的梯形组成的图案完整地输出显示出来。
  6. 数组清理部分
    • 使用memset函数将二维字符数组a的所有元素清空(设置为'\0'),这是为了在下一次输入新的梯形上边星号数量和梯形层数时,能够重新准确地绘制新的图案,避免上次图案残留的字符对新图案产生干扰,保证每次输出的图案都是根据当前输入参数独立生成的。
#include<stdio.h>
#include<string.h>

// 定义一个二维字符数组a,用于存储要打印的图案信息,这里假设图案最大尺寸为100x100
char a[100][100];

int main(void)
{
    int i, j, n, m, p, u;  // i、j用于循环计数,n表示梯形的上边星号数量,m表示梯形层数,p用于控制每行空格数量,u用于辅助复制上半部分图案到下半部分

    // 使用while循环持续读取输入,只要能成功读取两个整数(代表梯形的上边星号数量和梯形层数),就进行后续的图案绘制与输出操作,直到遇到文件结束符(EOF)停止循环
    while (scanf("%d%d", &n, &m) != EOF)
    {
        p = m - 1;  // 初始化空格数量,最初空格数量等于梯形层数减1,随着行数增加,空格逐渐减少

        // 外层循环控制行数,用于绘制图案的上半部分(梯形部分),从第0行开始,总共绘制m行
        for (i = 0; i < m; i++)
        {
            // 内层循环控制每行的列数,用于填充字符(空格或星号),总列数为n + m - 1,这个数量与梯形的形状相关
            for (j = 0; j < n + m - 1; j++)
            {
                // 如果当前列位置小于当前行对应的空格数量(即还没到该填充星号的位置),则在该位置填充空格
                if (j < p)
                    a[i][j] = ' ';
                else
                    // 否则,在该位置填充星号,以此来绘制出梯形形状
                    a[i][j] = '*';
            }
            p--;  // 每绘制完一行,空格数量减1,使得下一行的星号更靠右,形成梯形逐渐变宽的效果
        }

        u = m - 2;  // 初始化用于复制上半部分图案的行索引,指向从上半部分倒数第二行开始,因为要复制到下半部分与之对称的位置

        // 外层循环控制行数,用于绘制图案的下半部分(与上半部分对称的梯形部分),从第m行开始,到2 * m - 1行结束,总共绘制m - 1行
        for (i = m; i < 2 * m - 1; i++)
        {
            // 内层循环控制每行的列数,通过字符串复制函数strcpy,将上半部分对应行(由u控制)的内容复制到当前行,实现下半部分图案与上半部分对称的效果
            for (j = 0; j < n + m - 1; j++)
            {
                strcpy(a[i], a[u]);
            }
            u--;  // 每复制完一行,将复制的源行索引减1,向上半部分更靠上的行获取内容,以保证对称复制
        }

        // 外层循环控制行数,用于输出整个图案,从第0行开始,到2 * m - 1行结束,即输出整个上下对称的梯形组成的图案
        for (i = 0; i < m * 2 - 1; i++)
        {
            // 内层循环控制列数,逐个输出当前行的每个字符,将图案内容打印出来
            for (j = 0; j < n + m - 1; j++)
            {
                printf("%c", a[i][j]);
            }
            printf("\n");  // 每输出完一行,进行换行操作,以便下一行图案能正确显示
        }

        // 使用memset函数将二维字符数组a的所有元素清空(设置为'\0'),为下一次输入新的参数绘制新图案做准备,避免上次图案残留影响下次输出
        memset(a, '\0', sizeof(a));
    }

    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux 篇】Docker 启动和停止的精准掌舵:操控指南

文章目录 【Linux篇】Docker 启动和停止的精准掌舵&#xff1a;操控指南前言docker基本命令1. 帮助手册 2. 指令介绍 常用命令1. 查看镜像2. 搜索镜像3. 拉取镜像4. 删除镜像5. 从Docker Hub拉取 容器的相关命令1. 查看容器2. 创建与启动容器3. 查看镜像4. 启动容器5. 查看容器…

Android环境搭建

Android环境搭建 第一步&#xff1a;安装 Homebrew 执行以下命令来安装 Homebrew&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"检测是否安装成功&#xff1a; brew --version第二步&#xff1a;安装 No…

【调试工具】USB 转 UART 适配器(USB 转 TTL)

「USB 转 TTL 转换器」是错误的叫法&#xff0c;正确的叫法应该为 「USB 转 UART 适配器」。 Device connection 注意端口的交叉连接&#xff0c;Device1_TX<---->Device2_RX USB-to-UART adapter GND 记得接地。 使用&#xff1a; 当 TX,RX 需要电平为 0-3.3V 时&am…

Stable Diffusion核心网络结构——U-Net

本文详细详细介绍Stable Diffusion核心网络结构——U-Net&#xff0c;作用&#xff0c;架构&#xff0c;加噪去噪过程损失函数等。 目录 Stable Diffusion核心网络结构 SD模型整体架构初识 U-Net模型 【1】U-Net的核心作用 【2】U-Net模型的完整结构图 &#xff08;1&#xff0…

利用【AOP+自定义注解】实现项目中【日志记录】

利用AOP自定义注解实现日志记录 需求: 日志记录 操作日志记录,类似如下 思路:AOP自定义注解 AOP面向切面编程,利用 一种称为"横切"的技术&#xff0c;剖开封装的对象内部&#xff0c;并将那些影响了 多个类的公共行为抽取出封装到一个可重用模块&#xff0c;并将其…

JAVA-二叉树的概念和性质

目录 一.树形结构 1.1 概念 1.2 树的概念(重要)​编辑 补充&#xff1a;高度和深度的区别 1.3 树的应用 二. 二叉树&#xff08;重点&#xff09; 2.1 概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 2.4 选择题 一.树形结构 1.1 概念 树是一种 非线性 的数据结构&…

SSM虾米音乐项目2--分页查询

1.分页查询的底层逻辑 首先根据用户输入的流派&#xff0c;进行模糊查询根据查询的数据进行分页需要前端用户提供pageNo(当前页数)和pageSize(每页的数据量)并且要从后端计算count(总数据量)和totalPage(总页数)&#xff0c;以及startNum(每页开始的记录)从而将对应的页面数据…

debian编译失败

A、缘由和分析 debian的代码在删除该路径下的2个包后&#xff0c; 重新全编&#xff0c;编译不过的问题。 至于我为什么删除这2个包&#xff0c;这是因为在sdk第一次编译时一些文件已经打包进去了&#xff0c;我现在的修改无法更新进img中&#xff0c;而现在我的项目中不需要…

Thonny IDE + MicroPython + ESP32 + A9G 发短信打电话

A9G模块的使用说明 详见该博客&#xff1a;a9gdfgdfhguyiuh-CSDN博客 接线 ESP32 DEVKIT_C A9G GND GND D23 RX A9G开发板用板载MiniUSB&#xff08;安卓口&#xff09;供电 代码 from machine import UART # 导入串口模块 # import timeUART0 UART1 UART2 TX …

在GITHUB上传本地文件指南(详细图文版)

这份笔记简述了如何在GITHUB上上传文件夹的详细策略。 既是对自己未来的一个参考&#xff0c;又希望能给各位读者带来帮助。 详细步骤 打开目标文件夹&#xff08;想要上传的文件夹&#xff09; 右击点击git bash打开 GitHub创立新的仓库后&#xff0c;点击右上方CODE绿色按…

沈阳工业大学《2024年827自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《沈阳工业大学827自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题

初始化webpack应用示例

1、初始化npm mkdir webpack_test cd webpack_test npm init 2、安装webpack依赖 npm install webpack webpack-cli -D 3、添加文件夹&#xff0c;入口文件 mkdir src touch index.js touch add-content.js 文件夹结构 index.js import addContent from "./add-cont…

重邮+数字信号处理实验三:z变换及离散LTI系统的z域分析

实验目的&#xff1a; &#xff08; 1 &#xff09;学会运用 Matlab 求离散时间信号的有理函数 z 变换的部分分式展开&#xff1b; &#xff08; 2 &#xff09;学会运用 Matlab 分析离散时间系统的系统函数的零极点&#xff1b; &#xff08; 3 &#xff09;学会运用 …

前端开发底层逻辑全解析

前端开发就像是构建一座数字大厦的外表装饰与交互系统&#xff0c;而理解其底层逻辑则是打好坚实基础的关键。今天&#xff0c;我们就来深入剖析前端开发的底层逻辑。 一、浏览器的工作机制&#xff1a;幕后的魔法手 当我们在浏览器中打开一个网页时&#xff0c;一系列复杂的操…

MySQL -- CURD(下)

1. Update 修改 1.1 语法 对符合条件的结果进⾏列值更新 UPDATE [LOW_PRIORITY] [IGNORE] table_referenceSET assignment [, assignment] ...[WHERE where_condition][ORDER BY ...][LIMIT row_count]1.2 示例 将吕布的数学成绩改为99分 update exam set math 99 where …

【计算机网络】 —— 数据链路层(壹)

文章目录 前言 一、概述 1. 基本概念 2. 数据链路层的三个主要问题 二、封装成帧 1. 概念 2. 帧头、帧尾的作用 3. 透明传输 4. 提高效率 三、差错检测 1. 概念 2. 奇偶校验 3. 循环冗余校验CRC 1. 步骤 2. 生成多项式 3. 例题 4. 总结 四、可靠传输 1. 基本…

亚马逊 aws-waf-token 算法生成,协议逆向,通杀!!!

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 难度不大&#xff0c;核…

SpringBoot 赋能家乡特色推荐系统:高效架构与前沿技术集成

1 绪 论 1.1课题背景与意义 在Internet高速发展的今天&#xff0c;计算机的应用几乎完全覆盖我们生活的各个领域&#xff0c;互联网在经济&#xff0c;生活等方面有着举足轻重的地位&#xff0c;成为人们资源共享&#xff0c;信息快速传递的重要渠道。在中国&#xff0c;网上管…

肥羊直播 1.0.2 |频道非常丰富的高清画质电视直播软件

肥羊直播App是一款专为电视用户设计的直播软件&#xff0c;提供丰富多彩的直播内容&#xff0c;包括央视、卫视、综合、地方、卡通动漫、娱乐、历史古装和电影等频道。该软件支持多种设备&#xff0c;如智能电视、高清机顶盒和安卓手机&#xff0c;为用户带来便捷且高清的观看体…

基础加/解密程序V2.0(Ascll码加减实现) txt保存密钥

Hello大家好&#xff0c;这次我对上篇博客&#xff08;基础加/解密程序&#xff08;Ascll码加减实现&#xff09;-CSDN博客&#xff09;中的代码略加修改&#xff0c;退出了2.0版本&#xff0c;这次我加入了txt输入/出流&#xff0c;使得可随时对密钥进行更改。不过在使用前&am…