C语言打印输出星号图形(三角形、菱形、漏斗)

文章目录

      • 1. 介绍
      • 2. 案例分析
      • 3. 漏斗型
      • 4. 直角三角形
        • 4.1 左上直角三角形
        • 4.2 右上直角三角形
        • 4.3 左下直角三角形
        • 4.4 右下直角三角形
      • 5. 等腰三角形
        • 5.1 正等腰三角形
        • 5.2 倒等腰三角形
      • 6. 平行四边形
        • 6.1 纵向左下平行四边形
        • 6.2 纵向左上平行四边形
        • 6.3 横向左上平行四边形
        • 6.4 横向左下平行四边形
      • 7. 菱形

1. 介绍

这个初学循环的时候,可能会被布置为作业。这里我们介绍的不是找规律,而是这一类问题的通解。

其实这个问题可以被抽象为高中的线性规划,只不过我们这里需要离散化直线和区域内的点。

2. 案例分析

我们以漏斗型星号为例来分析。

在这里插入图片描述
如图所示,我们把坐标系给放正,需要( n = 4 n = 4 n=4)输出星号的点就是上面标的那些。显然这些点必须为整点。

实际上需要输出星号的点就是

N = n − 1 { ( r − c ) ( r + c − 2 N ) ≥ 0 0 ≤ r ≤ 2 N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} (r-c)(r+c-2N) \ge 0 \\ 0 \le r \le 2N \\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 (rc)(r+c2N)00r2N0c2N

r r r是行号,从 0 0 0行开始。
c c c是列号,从 0 0 0行开始。
这里 n n n是漏斗中心到底部的距离加一,
N = n − 1 N=n-1 N=n1
r c r\quad c rc都需要是整数值。

3. 漏斗型

  • 形状
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { ( r − c ) ( r + c − 2 N ) ≥ 0 0 ≤ r ≤ 2 N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} (r-c)(r+c-2N) \ge 0 \\ 0 \le r \le 2N \\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 (rc)(r+c2N)00r2N0c2N

  • 代码

#include <stdio.h>


void loudou_stars(int n) {


    int r ;
    int c ;

    int N = n - 1;


    for ( r = 0; r <= 2 * N; r++ ) {
        for ( c = 0; c <= 2 * N; c++ ) {
            if ((r - c) * (r + c - 2 * N) >= 0) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }
}


int main()
{

    int n = 4;
    
    loudou_stars( n );
    
    return 0;
}
  • 结果
    在这里插入图片描述

4. 直角三角形

4.1 左上直角三角形
  • 形式
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { r + c − N ≤ 0 0 ≤ r ≤ N 0 ≤ c ≤ N N = n -1\\ \begin{align*} \begin{cases} r +c - N\le 0 \\ 0 \le r \le N \\ 0 \le c \le N \end{cases} \\ \end{align*} N=n1 r+cN00rN0cN

  • 代码

#include <stdio.h>


void lu_trianle(int n) {

    int r;
    int c;
    int N = n - 1;
    for ( r = 0; r <= N; r++) {
        for ( c = 0; c <= N; c++) {
            if ( r + c - N <= 0  ) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }
}
int main()
{

    lu_trianle(5);
    return 0;
}
4.2 右上直角三角形
  • 形式
    在这里插入图片描述
  • 区域表达式
    N = n − 1 { r − c ≤ 0 0 ≤ r ≤ N 0 ≤ c ≤ N N = n-1\\ \begin{align*} \begin{cases} r - c \le 0 \\ 0 \le r \le N \\ 0 \le c \le N \end{cases} \\ \end{align*} N=n1 rc00rN0cN
  • 代码
#include <stdio.h>


void ru_trianle(int n) {

    int r;
    int c;
    int N = n - 1;

    for ( r = 0; r <= N; r++) {
        for ( c = 0; c <= N; c++) {
            if ( r - c  <= 0  ) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }
}
int main()
{

    ru_trianle(5);
    return 0;
}
4.3 左下直角三角形

其实对右上的三角形代码符号变一下就可以了

  • 形式
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { r − c ≥ 0 0 ≤ r ≤ N 0 ≤ c ≤ N N = n-1\\ \begin{align*} \begin{cases} r - c \ge 0 \\ 0 \le r \le N \\ 0 \le c \le N \end{cases} \\ \end{align*} N=n1 rc00rN0cN

  • 代码

#include <stdio.h>


void lb_trianle(int n) {

    int r;
    int c;
    int N = n - 1;
    for ( r = 0; r <= N; r++) {
        for ( c = 0; c <= N; c++) {
            if ( r - c  >= 0  ) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }
}
int main()
{

    lb_trianle(5);
    return 0;
}
4.4 右下直角三角形

将左上三角形换个符号就可以得到

  • 形状
    在这里插入图片描述
  • 区域表达式
    N = n − 1 { r + c − N ≥ 0 0 ≤ r ≤ N 0 ≤ c ≤ N N = n -1\\ \begin{align*} \begin{cases} r +c - N \ge 0 \\ 0 \le r \le N \\ 0 \le c \le N \end{cases} \\ \end{align*} N=n1 r+cN00rN0cN
  • 代码
#include <stdio.h>


void rb_trianle(int n) {

    int r;
    int c;
    int N = n - 1;

    for ( r = 0; r <= N; r++) {
        for ( c = 0; c <= N; c++) {
            if ( r + c - N >= 0  ) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }
}
int main()
{

    rb_trianle(5);
    return 0;
}

5. 等腰三角形

5.1 正等腰三角形
  • 形状
    在这里插入图片描述
  • 区域表达式

N = n − 1 { r + c − N ≥ 0 r − c + N ≥ 0 0 ≤ r ≤ N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} r+c-N \ge 0 \\ r-c+N \ge 0\\ 0 \le r \le N\\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 r+cN0rc+N00rN0c2N

  • 代码
#include <stdio.h>

void iso_trangle(int n) {


    int N = n - 1;
    int r;
    int c;
    for (r = 0; r <= N; r++) {
        for (c = 0; c <= 2 * N; c++) {
            if ((r + c  - N >= 0 ) && (r - c + N >= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}

int main() {

    iso_trangle(5);
    return 0;
}
5.2 倒等腰三角形
  • 形状
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { r − c ≤ 0 r + c − 2 N ≤ 0 0 ≤ r ≤ N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} r - c \le 0 \\ r + c - 2N \le 0\\ 0 \le r \le N\\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 rc0r+c2N00rN0c2N

  • 代码

#include <stdio.h>

void iso_trangle_rev(int n) {


    int N = n - 1;
    int r;
    int c;
    for (r = 0; r <= N; r++) {
        for (c = 0; c <= 2 * N; c++) {
            if ((r - c <= 0 ) && (r + c - 2 * N <= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}

int main() {

    iso_trangle_rev(5);
    return 0;
}

6. 平行四边形

6.1 纵向左下平行四边形
  • 形状
    在这里插入图片描述
  • 区域表达式
    N = n − 1 { r + c − N ≥ 0 r + c − 2 N ≤ 0 0 ≤ r ≤ 2 N 0 ≤ c ≤ N N = n-1\\ \begin{align*} \begin{cases} r + c - N \ge 0\\ r + c - 2N \le 0 \\ 0 \le r \le 2N\\ 0 \le c \le N \end{cases} \\ \end{align*} N=n1 r+cN0r+c2N00r2N0cN
  • 代码
#include <stdio.h>


void lb_parall(int n) {

    int N = n - 1;
    int r;
    int c;


    for (r = 0; r <= 2 * N; r++) {
        for (c = 0; c <= N; c++) {
            if ((r + c - N >= 0) && (r + c - 2 * N <= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}

int main()
{

    lb_parall(5);


    return 0;
}
6.2 纵向左上平行四边形
  • 形状
    在这里插入图片描述
  • 区域表达式
    N = n − 1 { r − c ≥ 0 r − c − N ≤ 0 0 ≤ r ≤ 2 N 0 ≤ c ≤ N N = n-1\\ \begin{align*} \begin{cases} r - c \ge 0\\ r - c - N \le 0 \\ 0 \le r \le 2N\\ 0 \le c \le N \end{cases} \\ \end{align*} N=n1 rc0rcN00r2N0cN
  • 代码
#include <stdio.h>


void lu_parall(int n) {

    int N = n - 1;
    int r;
    int c;


    for (r = 0; r <= 2 * N; r++) {
        for (c = 0; c <= N; c++) {
            if ((r - c >= 0) && (r - c - N <= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}

int main()
{

    lu_parall(5);


    return 0;
}
6.3 横向左上平行四边形
  • 形状
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { r − c ≤ 0 r − c + N ≥ 0 0 ≤ r ≤ N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} r - c \le 0\\ r - c + N \ge 0 \\ 0 \le r \le N\\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 rc0rc+N00rN0c2N

  • 代码

#include <stdio.h>


void lu_parall_h(int n) {

    int N = n - 1;
    int r;
    int c;


    for (r = 0; r <= N; r++) {
        for (c = 0; c <= 2 * N; c++) {
            if ((r - c  <= 0) && (r - c + N >= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}

int main()
{

    lu_parall_h(5);


    return 0;
}
6.4 横向左下平行四边形
  • 形状
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { r + c − N ≥ 0 r + c − 2 N ≤ 0 0 ≤ r ≤ N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} r + c - N \ge 0\\ r + c - 2N \le 0 \\ 0 \le r \le N\\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 r+cN0r+c2N00rN0c2N

  • 代码

#include <stdio.h>


void lb_parall_h(int n) {

    int N = n - 1;
    int r;
    int c;


    for (r = 0; r <= N; r++) {
        for (c = 0; c <= 2 * N; c++) {
            if ((r + c - N >= 0) && (r + c - 2 * N <= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}

int main()
{

    lb_parall_h(5);


    return 0;
}

7. 菱形

  • 形状
    在这里插入图片描述

  • 区域表达式
    N = n − 1 { r + c − N ≥ 0 r + c − 3 N ≤ 0 r − c + N ≥ 0 r − c − N ≤ 0 0 ≤ r ≤ 2 N 0 ≤ c ≤ 2 N N = n-1\\ \begin{align*} \begin{cases} r + c - N \ge 0 \\ r + c - 3N \le 0 \\ r - c + N \ge 0 \\ r - c - N \le 0\\ 0 \le r \le 2N\\ 0 \le c \le 2N \end{cases} \\ \end{align*} N=n1 r+cN0r+c3N0rc+N0rcN00r2N0c2N

  • 代码

#include <stdio.h>

void rhom_stars(int n)
{

    int N = n - 1;
    int r;
    int c;


    for ( r = 0;r <= 2 * N; ++r) {
        for ( c = 0; c <= 2 * N; ++c) {
            if ( (r + c - N >= 0 && r + c - 3 * N <= 0) && (r - c + N >= 0 && r - c - N <= 0)) {
                printf("*");
            }
            else {
                printf(" ");
            }
        }
        printf("\n");
    }

}


int main()
{

    rhom_stars(3);

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

刷题记录 动态规划-7: 63. 不同路径 II

题目&#xff1a;63. 不同路径 II 难度&#xff1a;中等 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角&#xff08;即 grid[0][0]&#xff09;。机器人尝试移动到 右下角&#xff08;即 grid[m - 1][n - 1]&#xff09;。机器人每次只能向下或者向右移动一步。…

springboot+vue+uniapp的校园二手交易小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Python 自学秘籍:开启编程之旅,人生苦短,我用python。

从2009年&#xff0c;用了几次python后就放弃了&#xff0c;一直用的php&#xff0c;现在人工智能时代&#xff0c;完全没php什么事情。必须搞python了&#xff0c;虽然已经40多岁了。死磕python了。让滔滔陪着你一起学python 吧。 开启新世界 在当今人工智能化的时代&#xff…

react的antd表格自定义图标

将原版的加号换成箭头 自定义图标 安装图标包&#xff1a; npm install --save ant-design/icons 引入&#xff1a; import { RightOutlined, DownOutlined } from ant-design/icons; 参数是一个函数 <Table columns{columns} dataSource{data} indentSize{20}expandIc…

chrome浏览器chromedriver下载

chromedriver 下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 上面的链接有和当前发布的chrome浏览器版本相近的chromedriver 实际使用感受 chrome浏览器会自动更新&#xff0c;可以去下载最新的chromedriver使用&#xff0c;自动化中使用新的chromedr…

Vim的基础命令

移动光标 H(左) J(上) K(下) L(右) $ 表示移动到光标所在行的行尾&#xff0c; ^ 表示移动到光标所在行的行首的第一个非空白字符。 0 表示移动到光标所在行的行首。 W 光标向前跳转一个单词 w光标向前跳转一个单词 B光标向后跳转一个单词 b光标向后跳转一个单词 G 移动光标到…

算法与数据结构(括号匹配问题)

思路 从题干可以看出&#xff0c;只要给出的括号对应关系正确&#xff0c;那么就可以返回true,否则返回false。这个题可以使用栈来解决 解题过程 首先从第一个字符开始遍历&#xff0c;如果是括号的左边&#xff08;‘&#xff08;‘&#xff0c;’[‘&#xff0c;’}‘&…

deepseek、qwen等多种模型本地化部署

想要在本地部署deepseek、qwen等模型其实很简单,快跟着小编一起部署吧 1 环境搭建 1.1下载安装环境 首先我们需要搭建一个环境ollama,下载地址如下 :Ollama 点击Download 根据自己电脑的系统选择对应版本下载即可 1.2 安装环境(window为例) 可以直接点击安装包进行安…

(2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调

Large Language Models to Diffusion Finetuning 目录 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微调的高斯扩散 3.2 架构 4. 主要实验结果 5. 结论 1. 概述 本文提出了一种新的微调方法——LM to Diffusion (L2D)&#xff0c;旨在赋予预训练的大语言模型&#xff08;…

一款wordpress AI免费插件自动内容生成+前端AI交互+文章批量采集

一款wordpressAI自动内容生成前端AI会话窗口交互文章批量采集免费插件 1. SEO优化文章生成 关键词驱动的内容生成&#xff1a;用户可以输入关键词或长尾关键词&#xff0c;插件会根据这些关键词生成高质量的SEO优化文章。文章结构清晰&#xff0c;语言自然流畅&#xff0c;符合…

2024年12月 Scratch 图形化(一级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化&#xff08;一级&#xff09;真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题&#xff0c;共50分) 第 1 题 点击下列哪个按钮&#xff0c;可以将红框处的程序放大&#xff1f;&#xff08; &#xff09; A. B. C. D. 标…

Java面试题集合篇5:10道基础面试题——保姆级详细图文、代码解释

文章目录 前言41、多线程场景下使用 ArrayList42、List 和 Set 区别43、HashSet 实现原理44、HashSet检查重复和保证数据不可重复45、BlockingQueue46、Map接口46.1、HashMap 实现原理46.2、HashMap在JDK1.7和JDK1.8中不同点46.3、JDK1.7 VS JDK1.8 比较 47、HashMap的put方法流…

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题2)-网络部分解析-附详细代码

目录 附录1:拓扑图​编辑 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.SW5 6.SW6 7.SW7 8.R1 9.R2 10.R3 11.AC1 12.AC2 13.EG1 14.EG2 15.AP2 16.AP3 附录1:拓扑图 附录2:地址规划表

优化数据库结构

MySQL学习大纲 一个好的数据库设计方案对于数据库的性能尝尝会起到事倍功半的效果&#xff0c;合理的数据库结构不仅使数据库占用更小的磁盘空间&#xff0c;而且使查询速度更快。数据库结构的设计需要考虑数据冗余、查询和更新速度、字段的数据类型是否合理等多方面的内容&…

【deepseek实战】绿色好用,不断网

前言 最佳deepseek火热网络&#xff0c;我也开发一款windows的电脑端&#xff0c;接入了deepseek&#xff0c;基本是复刻了网页端&#xff0c;还加入一些特色功能。 助力国内AI&#xff0c;发出自己的热量 说一下开发过程和内容的使用吧。 目录 一、介绍 二、具体工作 1.1、引…

Meta Sapiens AI论文解读:人类视觉模型基石初现,AI 未来走向何方?

一、引言 在本文中&#xff0c;我们将深入探讨 Meta AI 的一项新成果&#xff0c;该成果发表于一篇题为《Sapiens&#xff1a;人类视觉模型的基础》的研究论文中。这篇论文介绍了一系列模型&#xff0c;这些模型针对四项以人类为中心的基本任务&#xff0c;正如我们在上面的演示…

多用户同时RDP登入Win10

自备以下文件&#xff1a; winsw_frpc.xml展开如下&#xff1a; <service><!-- ID of the service. It should be unique across the Windows system--><id>winsw_frp</id><!-- Display name of the service --><name>winsw_frp</na…

2025 持续防范 GitHub 投毒,通过 Sharp4SuoExplorer 分析 Visual Studio 隐藏文件

在2024年底的网络安全事件中&#xff0c;某提权工具被发现植入后门&#xff0c;攻击者利用 .suo 文件作为隐蔽的攻击方式。由于 .suo 文件是 Visual Studio 项目的隐藏配置文件&#xff0c;通常不为安全研究人员所关注&#xff0c;因此为攻击者提供了潜在的攻击渠道。 初步调查…

Unity 2D实战小游戏开发跳跳鸟 - 记录显示最高分

上一篇文章中我们实现了游戏的开始界面,在开始界面中有一个最高分数的UI,本文将接着实现记录最高分数以及在开始界面中显示最高分数的功能。 添加跳跳鸟死亡事件 要记录最高分,则需要在跳跳鸟死亡时去进行判断当前的分数是否是最高分,如果是最高分则进行记录,如果低于之前…

牛客 - 链表相加(二)

描述 假设链表中每一个节点的值都在 0 - 9 之间&#xff0c;那么链表整体就可以代表一个整数。 给定两个这种链表&#xff0c;请生成代表两个整数相加值的结果链表。 数据范围&#xff1a;0≤n,m≤1000000&#xff0c;链表任意值 0≤val≤9 要求&#xff1a;空间复杂度 O(n)&am…