牛客网刷题 | BC107 箭形图案

2024-06-02 13:04

本文主要是介绍牛客网刷题 | BC107 箭形图案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。

输入描述:

本题多组输入,每行一个整数(2~20)。

输出描述:

针对每行输入,输出用“*”组成的箭形。


思路 :

也可以分为上下两部分 上面n行 下面n+1行

由空格和星号组成 两个控制

一个控制打印每行星号一个控制打印空格

  1. 读取输入:使用scanf函数读取用户输入的整数n。

  2. 打印上半部分:对于每一行i(从1到n),计算空格数为n - i,星号数为2 * i - 1。使用循环打印空格和星号。

  3. 打印下半部分:对于每一行i(从n-1到1),计算空格数为n - i,星号数为2 * i - 1。同样使用循环打印空格和星号。

  4. 输出换行:每打印完一行后,使用printf("\n")输出换行符。


代码 1 :

#define _CRT_SECURE_NO_WARNINGS
/*
思路 : 也可以分为上下两部分 上面n行 下面n+1行
由空格和星号组成 两个控制
一个控制打印每行星号一个控制打印空格
*/
# include <stdio.h>
int main(){int n = 0;while (scanf("%d", &n) != EOF){int i = 0;//上半部分 由空格和星号组成for (i = 0; i < n; i++){int j = 0;//打印空格//分析 上半部分的 空格 与n是双倍关系//例如输入3 第一行是 6 个空格 第二行 4个空格 第三行 2个空格//for (j = 0; j < n * 2 - 2; j++) error//上面的代码 n*2-2 是不对的 空格数没有随着变化 所以改成//因为由题目可知 //当i为0的时候 正好是6 个空格 i为1的时候 为4个空格//......for(j = 0; j < n*2-2*i;j++){printf(" ");}for (j = 0; j <= i; j++){printf("*");}printf("\n");}for (i = 0; i < n + 1; i++){int j = 0;//控制空格//例如输入 3 //空格数从 0 2 4 6 以此累积//从上半部分可以看出 与i有关 2倍的关系//for (j = 0; j < n + 2 * i; j++) error//for (j = 0; j < n - 2 * i; j++) error//上面两个代码是错误的 //原因是因为不能出现 n 因为一出现n的话 n是用户输入的数值 //就代表有数值,也有空格数了 当 i为0的时候 正好打印4个星星//i为1的时候打印 三个星星 //空格数从 0 2 4 6 以此累积for (j = 0; j < 2 * i; j++)//正确{printf(" ");}//假如输入 3 //这里的for循环 中 n+1-i 它的第一行星星数 4 3 2 1 //因为 以此递减的 而减去 i 正好for (j = 0; j < n + 1 - i; j++){printf("*");}printf("\n");}}return 0;
}

 代码 2 :

#include<stdio.h>
int main()
{int num;int i,j,k;while(scanf("%d",&num)!=EOF)//将火箭图案从中间分开 上部分一个大循环 下部分一个循环{for(i=0;i<=num;i++)//上部分循环从此开始  此处确定了上部分循环的行数{for(j=0;j<num-i;j++)//此处为先开始打印空格{printf("  ");}for(k=0;k<=i;k++)//此处打印图案*{printf("*");}printf("\n");//至此一次大循环完成 打印了一行的图形 在此换行}for(i=0;i<num;i++){for(j=0;j<=i;j++){printf("  ");}for(k=0;k<num-i;k++){printf("*");}printf("\n");}}return 0;
}————————————————————————————————————————————————————————————————#include<stdio.h> // 包含标准输入输出库int main() // 主函数入口
{int num; // 用于存储用户输入的行数int i, j, k; // 循环计数器while(scanf("%d",&num)!=EOF) // 当输入不是文件结束符时,循环读取输入{// 上半部分循环for(i = 0; i <= num; i++) // 确定上部分循环的行数,从0到num{// 打印空格for(j = 0; j < num - i; j++) // 根据当前行数i,计算并打印相应数量的空格{printf("  "); // 打印两个空格}// 打印星号for(k = 0; k <= i; k++) // 打印当前行的星号,数量从0增至i{printf("*"); // 打印一个星号}printf("\n"); // 完成一行的打印,换行}// 下半部分循环for(i = 0; i < num; i++) // 确定下部分循环的行数,从0到num-1{// 打印空格for(j = 0; j <= i; j++) // 根据当前行数i,计算并打印相应数量的空格{printf("  "); // 打印两个空格}// 打印星号for(k = 0; k < num - i; k++) // 打印当前行的星号,数量从num-i递减至0{printf("*"); // 打印一个星号}printf("\n"); // 完成一行的打印,换行}}return 0; // 程序正常结束
}

  

这篇关于牛客网刷题 | BC107 箭形图案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024047

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu

牛客《剑指Offer》 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 根据 普通的跳台阶可以总结出 f(n) = f(n-1) + f(n-2) +f(n-3) + 。。。。+ f(1) +1 不妨设 f(0) = 1 , 则易得 class Solution {public:int jumpFloorII(int n

牛客《剑指Offer》 跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 递归思想,n阶梯子走法等于n-1 加上n-2的。 class Solution {public:int jumpFloor(int number) {if(number==1) return 1;if(number==2) return 2;return jumpFl