水仙花数(流程图,NS流程图)

🏝️专栏:
🌅主页:猫咪-9527-CSDN博客 

“欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。”

目录

题目:

流程图绘制

普通流程图

NS流程图


题目:

打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。(画出流程图和NS图)

程序分析:

  • 基本思路: 利用 for 循环,从 100 到 999 遍历所有三位数。每个数通过数学运算提取出百位、十位和个位,然后计算每个位数的立方和。如果该立方和等于原数字,则该数字为“水仙花数”。
  • 核心逻辑:
    1. 提取三位数 i 的百位、十位和个位数值。
    2. 计算其立方和。
    3. 比较立方和与原数字是否相等,如果相等,则输出该数字。

C语言代码实现:

#include <stdio.h>
#include <math.h>

int main() 
{
    int i = 0; // 循环变量
    int a = 0; // 百位
    int b = 0; // 十位
    int c = 0; // 个位
    int sum = 0; // 立方和
    
    for (i = 100; i <= 999; i++) {
        a = i / 100;         // 提取百位
        b = i / 10 % 10;     // 提取十位
        c = i % 10;          // 提取个位
        sum = pow(a, 3) + pow(b, 3) + pow(c, 3); // 计算立方和
        
        if (sum == i) { // 判断是否为水仙花数
            printf(" %d", i); // 输出水仙花数
        }
    }
    return 0;
}

流程图绘制

普通流程图

流程图展示了从输入三位数到判断并输出“水仙花数”的过程,适合直观理解程序逻辑。

  1. 开始:启动程序。
  2. 初始化变量:初始化循环变量 i,取值范围为 100-999。
  3. 提取数字位:计算当前数字 i 的百位、十位、个位。
  4. 计算立方和:利用公式 a3+b3+c3a^3 + b^3 + c^3 计算立方和。
  5. 比较立方和与数字:如果相等,则输出该数字。
  6. 循环结束判断:如果未到达 999,继续循环;否则结束程序。

NS流程图

NS 流程图(Nassi-Shneiderman 图)是以结构化的方式展示程序流程,呈现出逐步细化的模块化过程,更适合代码级逻辑推导。 

### Raptor 绘制水仙花流程图的方法 #### 使用 Raptor 软件绘制水仙花流程图 Raptor 是一种用于算法设计和程序开发的可视化工具,能够帮助学生更好地理解编程逻辑。对于求解水仙花这一经典问题,在 Raptor 中可以通过构建相应的控制流来实现。 #### 定义变量并初始化 为了计算三位范围内的所有水仙花(即满足特定条件的整),需要定义几个必要的变量来进行操作: - `num` 表示当前正在测试的值; - `tempNum` 作为辅助存储原值以便后续验证; - `digitCount` 记录位长度; - `sumOfPowers` 存储各位立方之和的结果; ```plaintext // 初始化 num 变量为最小可能值 Set num to 100; ``` #### 循环遍历每一个候选字 采用循环结构逐一检验从 100 到 999 的自然是否符合条件。每次迭代时更新 `num` 并重置其他工作参准备下一轮判断。 ```plaintext While (num <= 999) do { Set tempNum = num; // 复制原始输入供最后比较使用 } ``` #### 提取各个位置上的单独字 利用除法与取模运算分离出百位、十位以及个位的具体值,并分别保存起来方便之后处理。 ```plaintext Set hundredsPlace = Int(tempNum / 100); Set tensPlace = Mod(Int(tempNum / 10), 10); Set onesPlace = Mod(tempNum, 10); ``` #### 计算每位字立方后的总和 将三个独立出来的部分各自三次方后再相加得到最终结果存入 sumOfPowers 当中等待下一步判定。 ```plaintext Set sumOfPowers = Pow(hundredsPlace, 3) + Pow(tensPlace, 3) + Pow(onesPlace, 3); ``` #### 验证该是否属于水仙花序列成员之一 如果经过上述步骤得出的新值正好等于最初的 testNumber,则说明这是一个有效的 Armstrong Number 或者说 Narcissistic number 即所谓的“自恋”。 ```plaintext If (sumOfPowers == num) then { Output "Narcissistic number found:" & num; } Endif; Increment num by 1; Endwhile; ``` 以上就是在 Raptor 环境里创建一个简单的程序用来找出所有的三元组形式下的阿姆斯特朗或称为水仙花的过程[^2]。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值