当前位置: 首页 > news >正文

分享刷题过程中有价值的两道题目

小编在这里先祝大家新的一年里所愿皆得,万事顺意,天天开心!!!

一.水仙花数

题目描述:

求100∼999中的水仙花数。若三位数ABC=A^3+B^3+C^3,则称ABC为水仙花数。例如153,13+53+33=1+125+27=153,则153是水仙花数。

可以从题目中得到我们需要的3个信息:

1.我们首先要产生100~999的数字

2.再判断这些数字是不是水仙花数

3.是水仙花数就打印出来

那思路出来了,这道题目的关键就是我们如何判断这个数是否是水仙花数。

其实就是根据题目说的,把每一位分出来,然后每一位的三次方加起来,看他等不等于原来的这三位数。而分离我们每一位数,就需要用到%,/这两个符号。

下面小编直接把代码放出来,供大家参考。

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    for (int i = 100; i <= 999; i++)
    {
        int tmp = i;
        int sum = 0;
        while (tmp)
        {
            sum += pow(tmp % 10, 3);
            tmp /= 10;
        }
        if (sum == i)
        {
            cout << i << endl;
        }
    }
    return 0;
}

二.画矩形

题目描述:

根据输入的四个参数:a,b,c,f 参数,画出对应的矩形。

前两个参数 a,b 为整数,依次代表矩形的高和宽;

第三个参数 c 是一个字符,表示用来填充的矩形符号;

第四个参数 f 为整数,0代表空心,否则代表实心。

这道题可以看到有区分空心和实心,全是实心倒是简单,只需要用两个变量,两次循环遍历即可。那怎么处理空心的呢?

我们其实画个图分析一下就可以了:

假设高和宽都是7,并且是空心的,那就可以画出以下的矩形

为了方便解释,我们直接定义两个变量i和j,i表示行(高a),j表示列(宽b)。

通过这张图,我们不难发现,第一行和最后一行一定都是有符号填充的。

第一列和最后一列也一定都是有符号填充的。

其实,这就是我们打印空心的条件,或者是方法。

我们只需要使用if语句去判断上面四个加粗字体是否满足就好,如果满足上面四个加粗条件,我们就打印输入的符号(c)。

以上是空心的打印方法。

最开始的时候,我们很容易写出这个框架:

下面就是根据我们分析的进行填充

实心很简单,每行每列直接遍历

空心要加上我们的判断条件

看到这里,可能有些人会有点难以理解这个条件,小编先拆开了给大家演示:

假设我们我们只保留了if条件句中i==1和i==a两个条件,这个时候我们遍历,就很容易想到,当外层循环满足i是第一行(i==1)和i是最后一行(i==a)的时候我们j是每一列都遍历循环,这时候就会打印出来两条有符号的图案。

调试一下,可以看到

那就还剩下竖着的两条图案,也就是我们另外两个条件(j==1)和(j==b)。

这个条件其实是,当我们外层循环i每一次不断增加的时候,我们内层循环只要一碰到j是第一列和j是最后一列的时候就打印符号(c),而其他列则为空。

这个时候我们把四个条件全部加上再来调试一遍:

记得加上打印空的这个条件,不然调试出来的就会是这个样子:

小编把代码放出来供大家参考

#include<iostream>

using namespace std;

int a, b, f;
char c;
int main()
{
    cin >> a >> b >> c >> f;

    if (f != 0)//实心
    {
        for (int i = 1; i <= a; i++)
        {
            for (int j = 1; j <= b; j++)
            {
                cout << c;
            }
            cout << endl;
        }
    }
    else//空心
    {
        for (int i = 1; i <= a; i++)
        {
            for (int j = 1; j <= b; j++)
            {
                if (i == 1 || i == a || j == 1 || j == b)
                    cout << c;
                else
                    cout << " ";
            }
            cout << endl;
        }
    }
    return 0;
}
 

—优化版本

理解了思路,我们就可以来优化一下,

可以看到虽然我们上面的代码可以运行,但是不够简洁,因为我们打印空心和实心用了两个几乎相似的循环(框架),有点啰嗦,我们可以把空心和实心合并起来,从而让代码更加简洁,可读性更高。

合起来,我们首先可以想到的是要使用if判断,并且合起来不管是空心还是实心我们都需要把空心外面的框架打印出来。

下面就是矩形里面的填充了。

从题目就可以看出来,当f等于0的时候,是空心,也就是矩形框架里面要填充的是空格( '  ' )。

否则,就是实心,也就是矩形框架里面我们直接打印字符c。

小编吧代码放出来,供大家参考:

今天的分享就到这里啦,感谢各位老铁长期以来的支持~

http://www.lryc.cn/news/530333.html

相关文章:

  • 蓝桥杯例题六
  • DeepSeek 详细使用教程
  • 《tcp/ip协议详解》,tcp/ip协议详解
  • 游戏引擎 Unity - Unity 设置为简体中文、Unity 创建项目
  • 【数据结构】_时间复杂度相关OJ(力扣版)
  • [Java]异常
  • 【C++语言】卡码网语言基础课系列----13. 链表的基础操作I
  • Vue.js组件开发-实现图片浮动效果
  • 自制Windows系统(十一、Windows11GUI)
  • 索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实?(中英双语)
  • 力扣257. 二叉树的所有路径(遍历思想解决)
  • 使用朴素贝叶斯对散点数据进行分类
  • 如何实现滑动列表功能
  • 计算机网络一点事(22)
  • C# 语言基础全面解析
  • [原创](Modern C++)现代C++的关键性概念: 流格式化
  • 《数据可视化新高度:Graphy的AI协作变革》
  • C++并发:设计无锁数据结构
  • 蓝桥杯刷题DAY2:二维前缀和 一维前缀和 差分数组
  • 雷电等基于VirtualBox的Android模拟器映射串口和测试CSerialPort串口功能
  • 四、jQuery笔记
  • 流浪 Linux: 外置 USB SSD 安装 ArchLinux
  • 1.For New TFLite Beginner
  • 吊打同类软件免费又可批量使用
  • MiniMind——跑通项目
  • 单细胞-第五节 多样本数据分析,打分R包AUCell
  • 【零拷贝】
  • 深入解析 C++ 字符串处理:提取和分割的多种方法
  • 计算机组成原理——存储系统(一)
  • Jenkins未在第一次登录后设置用户名,第二次登录不进去怎么办?