高位水仙花数
c语言水仙花数的解题思路
c语言水仙花数的解题思路【实用版】目录一、水仙花数的定义与特点二、c 语言输出水仙花数的算法实现1.分析三位数的各位数字的立方和2.比较 sum 与给出的三位数是否相等三、c 语言水仙花数的程序实例1.输入数据格式与范围2.详细程序代码四、结论与展望正文一、水仙花数的定义与特点水仙花数是指一个三位数,它的各位数字的立方和等于其本身。
例如:153 是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 153。
水仙花数这一概念来源于数学领域,它在数字游戏中具有独特的魅力。
二、c 语言输出水仙花数的算法实现为了实现 c 语言输出水仙花数的功能,我们需要编写一个程序,该程序可以分析一个三位数的各位数字的立方和,并与给出的三位数比较,以判断它是否为水仙花数。
具体算法步骤如下:1.分析三位数的各位数字的立方和我们可以通过循环结构,将一个三位数的个位、十位、百位数字分别提取出来,并计算它们的立方和。
例如:```cint main() {int num = 123; // 假设输入的数为 123int ones = num % 10; // 提取个位数字int tens = (num / 10) % 10; // 提取十位数字int hundreds = num / 100; // 提取百位数字int sum = ones * ones * ones + tens * tens * tens + hundreds * hundreds * hundreds;```2.比较 sum 与给出的三位数是否相等将计算出的立方和 sum 与原数比较,如果相等,则该数为水仙花数。
例如:```cif (sum == num) {printf("%d是水仙花数。
", num);} else {printf("%d不是水仙花数。
", num);}```三、c 语言水仙花数的程序实例以下是一个完整的 c 语言水仙花数程序实例:```c#include <stdio.h>int main() {int num;printf("请输入一个三位数:");scanf("%d", &num);int ones = num % 10;int tens = (num / 10) % 10;int hundreds = num / 100;int sum = ones * ones * ones + tens * tens * tens + hundreds * hundreds * hundreds;if (sum == num) {printf("%d是水仙花数。
第21课计算水仙花数
的个位数字与其十位数字交换后得到一个新数,它与原数相加,结 果恰好是一个自然数的平方,这样的两位数有多少?请将下面代码中的划线处 填写完整:
Private Sub Command1_Click() Dim s1 As Integer,s2 as Integer Dim a As Integer, b As Integer List1.Clear For a = 1 To 9 For b = a To 9 ' 假设b≥a,避免重复 s1=10*a+b
3.寻找勾股数。“勾股数”指满足勾股定理关系的 一组整数,也就是直角三角形三边长恰好都取 整数值的特殊情况,3,4,5就是一组勾股数大 家都知道32+42=52, 输出50以内能够组成勾股 数。
4.“百钱买百鸡”问题。中国古代数学家张丘建在 《张丘建算经》中提出一个问题。“鸡翁一, 值钱五,鸡母一,值钱三,鸡雏三,值钱一。 百钱买百鸡。问鸡翁、母、雏各几何?”。
授课人:杨鹏
控件属性值的设置 参考如下表
高中信息技术必修2:算法与程序设计
对象名 Form1 List1 (用绘制而成) Command1
属性名 Caption
list Caption
属性值 水仙花数
空白 计算
授课人:杨鹏
高中信息技术必修2:算法与程序设计
②分析算法流程,编写代码;
Private Sub Command1_Click()
第21课 计算水仙花数
授课人:杨鹏
高中信息技术必修2:算法与程序设计
1.寻找水仙花数。水仙花数是指这样的三位整数, 其各个位上的数之立方和恰好等于该数自己, 例如371,是水仙花数,因为371=33+73+13,设 计一个算法寻找出所有的水仙花数。
水仙花数(matlab编程求解)
水仙花数是指一个 n 位数( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)三位的水仙花数共有4个:153,370,371,407;四位的水仙花数共有3个:1634,8208,9474;五位的水仙花数共有3个:54748,92727,93084;六位的水仙花数只有1个:548834;七位的水仙花数共有4个:1741725,4210818,9800817,9926315;八位的水仙花数共有3个:24678050,24678051,88593477下面我们运用Matlab编写程序求解水仙花数。
Matlab程序如下:function shuixian(n) %n为用户输入的一个整数W=zeros(1,n);ss=0;for m=10^(n-1):10^n-1for i=1:nW(i)=fix(rem(m,10^(n+1-i))/10^(n-i));endW=W.^n;for j=1:nss=ss+W(j);endif m==ssdisp(m);endss=0;W=zeros(1,n);end运行结果示例:>> shuixian1(3)153370371407>> shuixian1(4)163482089474>> shuixian1(5)547489272793084>> shuixian1(6)548834>> shuixian1(7)1741725421081898008179926315解析:上述程序,在理论上可以求解一切水仙花数,但限于计算机的精度,当n 较大时,程序运行时间较长。
整个程序简洁实用。
水仙花数
#include<iostream> using namespace std; int main() {int a,q,w,e; for(a=100;a<1000;++a) {q=a/100; w=(a-q*100)/10; e=(a-q*100-w*10); if(a==q*q*q+w*w*w+e*e*e) cout<<a<<"是水仙花数"<<endl;}; return 0; }
求取方法(非高精度)
以下为在各种编程语言中实现求取水仙花数的方法(非高精度)。
PHP “水仙花数”实现代码:
<?php for($i=100;$i<1000;$i++){ $a=intval($i/100); $b=intval($i/10)%10; $c=$i%10; if(pow($a,3)+pow($b,3)+pow($c,3)==$i){ echo $i."\t"; } } ?>
水仙花数
水仙花
什么是水仙花数
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数, 他是这样定义的:水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
常见水仙花数
三位的水仙花数共有 4 个:153,370,371,407; 四位的水仙花数共有 3 个:1634,8208,9474; 五位的水仙花数共有 3 个:54748,92727,93084; 六位的水仙花数只有 1 个:548834; 七位的水仙花数共有 4 个:1741725,4210818,9800817,9926315; 八位的水仙花数共有 3 个:24678050,24678051,88593477 …… …… 使用高精度计算,可以得到超过 INT 类型上限的水仙花数: 5: 93084 5: 92727 5: 54748 6: 548834 7: 9800817 7: 4210818 7: 1741725 7: 9926315 8: 24678050
VB穷举法(水仙花数与四叶玫瑰数)
三 、 编 写 代 码
Dim i As Integer Dim g As Integer, s As Integer, b As Integer
For i = 100 To 999 g = i Mod 10 s = (i Mod 100) \ 10 b = i \ 100 If g ^ 3 + s ^ 3 + b ^ 3 = i Then Print i End If Next 演示 End Sub
For i = ____To _____ g =______ s =______ b =______ q=______ If ___________= i Then Print i End If Next End Sub
演示
课堂检测
利用多重循环实现
Private Sub Form_Click() Cls Print "水仙花数有:“ Dim g As Integer, s As Integer, b As Integer
找出水仙花数
一、分析问题
由水仙花数的概念可知:
三 位数的正整数。设变量i用于 1、它们是_____ 100 变到 存放每一个需要判断的数,则i由______ 999 循环 结构。 ______, 故需要用到______
一、分析问题:
由水仙花数的概念可知:
2、水仙花数是各位数的立方之和,故首先需得到 每位上的数。设变量g、s、b分别存放个位、十 位、百位上的数,则: i mod 10 g=______ i \10 mod 10 或者 (i mod 100)\10 s=______ i \100 b=______ 3、找到各位上的数后,判断其是否为 g^3+s^3+b^3=i 水仙花数的条件为:_____________
c语言水仙花数的解题思路
c语言水仙花数的解题思路【最新版】目录一、水仙花数的定义与特点二、c 语言编程实现水仙花数的思路1.分析输入的三位数的个位、十位、百位数字2.计算各位数字的立方和3.比较立方和与原数的大小,判断是否为水仙花数三、具体编程实现步骤1.导入所需头文件2.定义变量并初始化3.利用循环读取输入数据4.分析输入数据的百位、十位、个位数字5.计算各位数字的立方和6.比较立方和与原数的大小,输出结果四、总结正文一、水仙花数的定义与特点水仙花数是指一个三位数,它的各位数字的立方和等于其本身。
例如:153 是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 153。
水仙花数这一概念源于数学,并在计算机编程领域得到了广泛应用。
二、c 语言编程实现水仙花数的思路要解决这个问题,我们可以采用以下步骤:1.分析输入的三位数的个位、十位、百位数字2.计算各位数字的立方和3.比较立方和与原数的大小,判断是否为水仙花数三、具体编程实现步骤1.导入所需头文件```c#include <stdio.h>```2.定义变量并初始化```cint main() {int num, originalNum;scanf("%d", &num);originalNum = num;}```3.利用循环读取输入数据```cwhile (num!= 0) {// 处理输入数据的百位、十位、个位数字}```4.分析输入数据的百位、十位、个位数字```cint hundreds = num / 100;int tens = (num % 100) / 10;int ones = num % 10;```5.计算各位数字的立方和```cint sum = ones * ones * ones + tens * tens * tens + hundreds * hundreds * hundreds;```6.比较立方和与原数的大小,输出结果```cif (sum == originalNum) {printf("%d", originalNum);}```四、总结通过以上步骤,我们可以用 c 语言编写一个程序来找出给定范围内的所有水仙花数。
c语言水仙花数的解题思路
c语言水仙花数的解题思路
摘要:
I.引言
- 介绍水仙花数的概念
- 说明用C 语言解决水仙花数的意义
II.水仙花数的性质
- 定义水仙花数
- 分析水仙花数的性质
- 总结水仙花数的特征
III.C 语言解决水仙花数的思路
- 算法一:暴力枚举法
- 算法二:数学归纳法
- 算法三:动态规划法
- 比较三种算法的优劣
IV.C 语言实现
- 实现算法一
- 实现算法二
- 实现算法三
- 总结实现过程
V.结论
- 总结C 语言解决水仙花数的方法
- 展望水仙花数问题的未来研究方向
正文:
I.引言
水仙花数,是指一个三位数,其各位数字的立方和等于该数本身。
水仙花数
水仙花数水仙花什么是水仙花数春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:水仙花数是指一个 n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)常见水仙花数三位的水仙花数共有4个:153,370,371,407;四位的水仙花数共有3个:1634,8208,9474;五位的水仙花数共有3个:54748,92727,93084;六位的水仙花数只有1个:548834;七位的水仙花数共有4个:1741725,4210818,9800817,9926315;八位的水仙花数共有3个:24678050,24678051,88593477…………使用高精度计算,可以得到超过INT类型上限的水仙花数:5: 930845: 927275: 547486: 5488347: 98008177: 42108187: 17417257: 99263158: 246780508: 246780518: 885934779: 1465112089: 9129851539: 4723359759: 53449483610: 467930777411: 3216404965011: 4002839422511: 4267829060311: 4938855060611: 3216404965111: 9420459191411: 4470863567911: 8269391657814: 2811644033596716: 433828176939137016: 433828176939137117: 3587569906225003517: 2189714258761207519: 328958298444318703219: 492927388592808882619: 449812879116462486920: 6310542598859969391621: 44917739914603869730721: 12846864304373139125223: 2790786500997705256781423: 3545259010403169193594323: 2787969489305407447140523: 2188769684112291628885824: 17408800593806529302372224: 188451485447897896036875(为环保起见,24位以上的水仙花数略)理论上,最大的水仙花数不超过34位。
C语言水仙花数(详细版)
C语言水仙花数(详解版)问题描述输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
问题分析根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等,三位数为“水仙花数”,反之,则不是。
算法设计“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是100〜999。
对应的循环条件如下:for(n=10; n<1000; n++){//......}对代码的说明:•将n整除以100,得出n在百位上的数字hun。
•将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位上的数字ten。
•将n对10取余,得出n在个位上的数字ind。
•求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。
对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。
下面是完整的代码:1.#include<stdio.h>2.int main()3.{4.int hun, ten, ind, n;5.printf("result is:");6.for( n=100; n<1000; n++)/*整数的取值范围*/7.{8.hun = n /100;9.ten =(n-hun*100)/10;10.ind = n %10;11.if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind)/*各位上的立方和是否与原数n相等*/12.printf("%d ", n);13.}14.printf("\n");15.16.return0;17.}运行结果:result is:153 370 371 407。
python水仙花数的编程代码
# Python水仙花数## 一、什么是水仙花数水仙花数,又称超完全数字不变数、自幂数、自守数、阿姆斯特朗数,是指一个三位数,其各位数字的立方和等于其本身,例如:153=1^3+5^3+3^3,即:153=1+125+27,满足这样的规律的数,就称为水仙花数。
## 二、Python水仙花数编程代码```# Python编程求水仙花数for num in range(100,1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)```上面的代码可以用来求解Python水仙花数,其中num表示三位数,low表示个位数,mid 表示十位数,high表示百位数。
## 三、Python水仙花数测试下面我们来测试一下上面的Python水仙花数编程代码,代码如下:```# Python编程求水仙花数for num in range(100,1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)```输出结果如下:153370371407可以看到,上面的代码输出了四个水仙花数,说明我们的代码是可以正确求出水仙花数的。
## 四、总结本文介绍了Python水仙花数编程代码,以及如何使用Python编程求解水仙花数。
我们可以使用上面的代码来求解Python水仙花数,并且测试结果也表明,我们的代码是可以正确求出水仙花数的。
数值中数位的概念
数值中数位的概念数值中的数位是指一个数的各个位置上的数字的个数和数值。
每个数位的数值,它所代表的意义和数位位置有关。
从个位开始,每往左移一位,数位就增加一位,数值就增加10倍,而往右移一位,则数位减少一位,数值减少10倍。
数位和数值的概念在我们日常生活中有广泛的应用,比如数字系统、计算、统计等领域。
在一个十进制数中,数位从右向左依次是个位、十位、百位、千位、万位等。
例如,在数值3274中,个位数是4,十位数是7,百位数是2,千位数是3。
每个数位的数值都是0到9之间的整数,且每个数位所代表的数值与其位置有关。
数位的概念也可以应用在其他进制系统中,比如二进制、八进制和十六进制。
在二进制系统中,只有两个数位0和1,每向左移一位,数位增加一位,数值增加2倍。
在八进制系统中,每个数位的数值是0到7之间的整数,而在十六进制系统中,每个数位的数值是0到9和A到F之间的十六个符号。
数位的概念在计算和数学运算中也有重要的应用。
比如,在加法运算中,每个数位上的数字相加后,超过10的进位需要加到下一位的运算中。
在减法运算中,每个数位上的数字相减后,不够减的需要向高位借位。
在乘法和除法运算中,数位的概念也有重要的作用,特别是在进行长乘法和长除法时。
数位还可以用于描述和表示数字的性质和规律。
比如,水仙花数是指一个三位数,其各个数位上的数字的立方和等于它本身。
例如,153是一个水仙花数,因为1的立方加上5的立方加上3的立方等于153。
其他的数位规律还包括回文数、对称数等。
在统计学中,数位的概念可以用于分析数字的分布和频率。
比如,Benford定律指出,真实世界中的数字在首位数位上出现的频率不均匀,以1开头的数字出现的概率相对较高,随着首位数位的增加,概率逐渐减小。
这一定律在很多领域都有应用,比如财务报表分析、选举结果分析等。
总之,数值中的数位是指一个数的各个位置上的数字的个数和数值。
数位和数值的概念在我们日常生活中有广泛的应用,比如数字系统、计算、统计等领域。
python123题库3位水仙花数计算
python123题库3位水仙花数计算标题:Python123题库3位水仙花数计算引言概述:水仙花数是指一个三位数,其各个数字的立方和等于该数本身。
在Python编程中,我们可以通过编写代码来计算3位水仙花数。
本文将详细阐述如何使用Python编程语言计算3位水仙花数。
正文内容:1. 水仙花数的定义1.1 水仙花数的概念水仙花数是指一个三位数,其各个数字的立方和等于该数本身。
例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
1.2 水仙花数的特点水仙花数的特点是它的个位、十位和百位数字的立方和等于该数本身。
2. Python编程计算水仙花数2.1 使用循环结构通过使用循环结构,我们可以遍历所有的三位数,然后判断其是否为水仙花数。
2.2 判断水仙花数的条件在判断一个三位数是否为水仙花数时,我们需要将该数拆分为个位、十位和百位数字,并计算其立方和。
如果立方和等于该数本身,则说明该数是水仙花数。
2.3 编写Python代码实现计算我们可以使用Python的循环结构和条件判断语句来编写代码实现计算水仙花数的功能。
具体步骤包括遍历所有的三位数,拆分数字并计算立方和,判断是否为水仙花数,并输出结果。
3. 总结:通过本文的介绍,我们了解了水仙花数的定义和特点,并学习了如何使用Python编程语言计算3位水仙花数。
通过循环结构和条件判断语句,我们可以编写代码来实现水仙花数的计算功能。
掌握这一技能可以帮助我们更好地理解循环和条件判断的应用,并提升我们的编程能力。
总结分为三个方面:3.1 水仙花数的定义和特点3.2 Python编程计算水仙花数的步骤3.3 学习计算水仙花数的意义和应用价值总结:本文详细介绍了水仙花数的定义和特点,并通过Python编程语言实现了3位水仙花数的计算。
掌握这一技能有助于提升编程能力和理解循环和条件判断的应用。
希望读者通过本文的学习,能够更好地掌握Python编程,并能够应用于实际问题中。
水仙花数
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:main(){int i,j,k,n; /*定义整型变量i,j,k,n*/printf("'water flower'number is:"); /*输出语句(没必要解释吧)*/for(n=100;n<1000;n++) /*循环语句,每次循环N都自加1*/ { i=n/100; /*求出N这个3位数的百位*/ j=(n-i*100)/10; /*求出N这个3位数的十位*/ k=n%10; /*%是求余运算符,比如7%4值为3,求出个位数*/ if(i*i*i+j*j*j+k*k*k==n) /*百位数,十位数,个位数的立方和*/ printf("%d\n",n); /*以十进制整数形式输出*/ }}"#include<stdio.h>#include<stdlib.h>void main(){int i=1;int psquare;while(1){psquare=i*i;i++;if (psquare >= 1 && psquare <= 1000){printf("%d\t",psquare);}else{break;}}printf("\n");return;}"1.首先理解什么什么是完全平方数一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数,也叫做平方数。
例如:0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,… 2.简单说假设X^2 = 10^3 ,Y^2 = 10^32,还有个未知变量V 只要V^2是在区间[X^2,Y^2]那么V^2就是我们要求的完全平方数3.1000开算数平方根是31.6222.。
水仙花数,列表排序,36选7.
⽔仙花数,列表排序,36选7.内容:join , fromkeys , set , .add , .update , .pop , .remove , 交集(s1&s2) , 并集(s1|s2) , 深浅拷贝 , .copy , import copy copy.deepcopy() , 交换a,b = b,a1.判断⼀个数是否是⽔仙花数,⽔仙花数是⼀个三位数,三位数的每⼀位的三次⽅的和还等于这个数. 那这个数就是⼀个⽔仙花数, 例如: 153 = 1**3 + 5**3 + 3**3a = input("请输⼊⼀个三位数:")sum = 0for el in a:sum += int(el)**3if sum == int(a):print("%s是⽔仙花数" % a)else:print("%s不是⽔仙花数" % a)或a = input("请输⼊⼀个三位数:")n = int(a[0])**3 + int(a[1])**3 + int(a[2])**3if n == int(a):print("%s是⽔仙花数" % a)else:print("%s不是⽔仙花数" % a)#求出所有⽔仙花数:for a in range(100,1000):n = int(str(a)[0])**3 + int(str(a)[1])**3 + int(str(a)[2])**3if n == a:print("%s是⽔仙花数" % a)2.给出⼀个纯数字列表.请对列表进⾏排序(升级题).思路:1.完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 102.循环列表. 判断a[i]和a[i+1]之间的⼤⼩关系, 如果a[i]⽐a[i+1]⼤. 则进⾏互换.循环结束的时候. 当前列表中最⼤的数据就会被移动到最右端.3.想⼀想, 如果再次执⾏⼀次上⾯的操作. 最终第⼆⼤的数据就移动到了右端. 以此类推.如果反复的进⾏执⾏相应的操作. 那这个列表就变成了⼀个有序列表.1.冒泡排序:a = 10b = 24c = aa = bb = cprint(a,b)或lst[i],lst[i+1] = lst[i+1],lst[i]2.lst = [10, 9, 5, 6, 7, 5, 5, 8, 10, 6]for i in range(len(lst)-1):if lst[i] > lst[i+1]:lst[i],lst[i+1] = lst[i+1],lst[i]print(lst)3.lst = [10, 9, 5, 6, 7, 5, 5, 8, 10, 6]for el in range(len(lst)-1):for i in range(len(lst)-1):if lst[i] > lst[i+1]:zjz = lst[i]lst[i] = lst[i + 1]lst[i + 1] = zjzprint(lst)或for el in range(len(lst)):for i in range(len(lst)-1):if lst[i] > lst[i+1]:lst[i],lst[i+1] = lst[i+1],lst[i]print(lst)3.完成彩票36选7的功能. 从36个数中随机的产⽣7个数.最终获取到7个不重复的数据作为最终的开奖结果.随机数:from random import randintrandint(0, 20) # 0 - 20 的随机数from random import randints = set()while len(s) < 7:a = randint(1, 36) # 0 - 20 的随机数s.add(a)print(s)4.税务部门征收所得税. 规定如下:1). 收⼊在2000以下的. 免征.2). 收⼊在2000-4000的, 超过2000部分要征收3%的税.3). 收⼊在4000-6000的, 超过4000部分要征收5%的税.4). 收⼊在6000-10000的, 超过6000部分要征收8%的税.4). 收⼊在10000以上的, 超过部分征收20%的税.注: 如果⼀个⼈的收⼊是8000, 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税.收⼊ = 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8%让⽤户输⼊它的⼯资, 计算最终⽤户拿到⼿是多少钱.money = int(input("请输⼊⼯资:"))if money < 2000:print("税收为0元")elif money<4000:print("税为",(money-2000)*0.03,"元")elif money <6000:print("税为",(money-4000)*0.05+2000*0.03,"元")elif money <10000:print("税为",(money-6000)*0.08+2000*0.05+2000*0.03,"元")else:print("税为",(money-10000)*0.2+4000*0.08+2000*0.05+2000*0.03,"元")。
水仙花程序
1关于水仙花数发表时间:2008-04-24 20:33:12 更新时间:2008-04-24 20:33:12 此题考试非常容易考到!!!!!!!!!!!需要注意!!!!!!!!水仙花数意思是一个三位数m,它有如下特点:m=a^3+b^3+c^3其中a为m的百位数,b为m的十位数,c为m的个位数譬如m=371则有a 为 3b 为7c 为 1a,b,c如何求?a为m的百位数:首先把m的小数点后移两位,用m/100就可以了吧~这时候把小数去掉就得到了百位数了.————如何去掉小数?fix()或者int()都可以!比如:要371的百位数。
可以用371/100=3.71 然后用fix(3.71)=3就求出来百位b为m的十位数:如何求十位?利用刚刚求出的百位数a,将m简化为一个十位数m-a*100比如:371-3*100=71这样再求这个十位数7就好求了。
仍然利用小数点前移然后求整fix(71/10)就求出b=fix(7.1)=7c为m的个位:跟求b一样~利用先前求出的a与b,将m的十位,百位都减去就OK啦~~~~这样,a与b与c就都有了然后用选择结构如果 m 满足这样的条件m=a^3+b^3+c^3 则m为一个水仙花数打印m否则m不是一个水仙花数最后,另m从100开始循环到500 结束。
程序是for m = 100 to 500a=fix(m/100)b=fix((m-a*100)/10)c=m-a*100-b*10if m=a^3+b^3+c^3 thenprint m;"为一个水仙花数"endifnext mPS: 你可以用这种方法另m从100开始到999循环,找出所有水仙花数可以找出从1000到9999 中找出有这样特点数m:m= a^4+b^4+c^4+d^4其中a,b,c,d分别为m的千位,百位,十位,个位。
这样的数叫做玫瑰花数!!!!!从10000到99999一样可以找出5次方的数。
JavaScript求取水仙花数
JavaScript求取⽔仙花数⼀、什么是⽔仙花数⽔仙花数也称为超完全数字不变数、⾃幂数、阿姆斯壮数、阿姆是特朗数。
⽔仙花数是指⼀个三位数,每个位数上数字的3次幂之和等于数字它本⾝。
⽔仙花数是⾃幂数的⼀种,三位的三次⾃幂数才叫做⽔仙花数;三位的⽔仙花数总够有4个:153,370,371,470⼆、通过JS取得⽔仙花数思路分析:1、使⽤for循环查找遍历从100到 999的所有三位数;2、判断遍历的数字是否是各个位数的数字的3次幂数之和是否等于数字本⾝,如果是即为⽔仙花数,则在控制台输出(如何选取各个位数)(1)选取个位数模以10,得到余数即为个位数(2)选取⼗位数 i除以10,再对结果进⾏取整,取整后得到⼀个两位数的整数。
⽤这个结果对10取模,得到⼗位数(3)选取百位数三位数除以100,再取整,就得到了百位数。
3、使⽤ if语句判断 i 是否是⽔仙花数。
Math对象⽤于执⾏数学任务,pow(x , y)函数⽤于求取 x 的 y 次幂。
1for(var i = 100;i<=999;i++){2var gw = i%10;3var sw = parseInt(i/10) % 10;4var bw = parseInt(i/100);5if(i == Math.pow(gw,3)+Math.pow(sw,3)+Math.pow(bw,3)){6 console.log(i);7 }8 }输出结果为:三、求取其他的⾃幂数⼀位⾃幂数:独⾝数两位⾃幂数:没有三位⾃幂数:⽔仙花数四位⾃幂数:四叶玫瑰数五位⾃幂数:五⾓星数六位⾃幂数:六合数七位⾃幂数:北⽃七星数⼋位⾃幂数:⼋仙数九位⾃幂数:九九重阳数⼗位⾃幂数:⼗全⼗美数1、四叶玫瑰数(1634,8208,9474)1for(var i = 1000;i<=9999;i++){2var gw = i%10;3var sw = parseInt(i/10)%10;4var bw = parseInt(i/100)%10;5var qw = parseInt(i/1000);6if(i == Math.pow(gw,4)+Math.pow(sw,4)+Math.pow(bw,4)+Math.pow(qw,4)){7 console.log(i);}8 }2、五⾓星数(54748, 92727,93084)console.time('五⾓星数');for(var i = 10000;i<=99999;i++){var gw = i%10;var sw = parseInt(i/10)%10;var bw = parseInt(i/100)%10;var qw = parseInt(i/1000)%10;var ww = parseInt(i/10000);if(i==Math.pow(gw,5)+Math.pow(sw,5)+Math.pow(bw,5)+Math.pow(qw,5)+Math.pow(ww,5)){console.log(i);}}console.timeEnd('五⾓星数');注意:这⾥⾯使⽤ console.time() 和 console.timeEnd() 来计算运⾏的时间console.time() ⽅法是作为计算器的起始⽅法,该⽅法⼀般⽤于测试程序执⾏的时长。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int Smun[10]; //用来存储 0~9组成的21位数每个数的数量,这样可以避免重复计算比如说 153是水仙花数,
//然后135肯定就不是水仙花 这是我优化计算的一个原理,不知道还有别的好方法吗
int M=FM;
void multi(char *,char *,char *); //大整数乘法
void add(char *,char *,char *); //大整数加法
void init(); //存储0~9的21次方的函数。
void flower(int); //这是一个使用回溯算法的递归函数,其它几个函数都是为这一个函数服务的。
amun[Mun[i]-'0']++;
}
for(i=0;i<10;i++){
if(amun[i]!=Smun[i]) return;
}
printf("%s\n",Mun);
}
void init(){
int i;
int j;
char a[10][2]={"0","1","2","3","4","5","6","7","8","9"};
result[i]%=10;
}
}
k=1;
for(i=2*MAX;i>=0;i--){
if(bstart){
muresult[k]=result[i]+'0';
k++;
}
else if(result[i]){
muresult[0]=result[i]+'0';
int shu1[MAX+10];
int shu2[MAX+10];
int i,j;
int bstart=0;
int k;
memset(shu1,0,sizeof(shu1));
memset(shu2,0,sizeof(shu2));
j=0;
for(i=strlen(num1)-1;i>=0;i--)
for(i=0;i<=FM;i++){
M-=i; Smun[m]=i;
flower(m+1);
Smun[m]=0; M+=i;
}
}//这是最近一直在看的回溯算法
void judge(){
int i;
int amun[10];
char b[10][3];
shu1[i]-=10;
shu1[i+1]++;
}
}
k=1;
for(i=MAX+1;i>=0;i--){
if(bstart){
adresult[k]=shu1[i]+'0';
k++;
}
else if(shu1[i]){
adresult[0]=shu1[i]+'0';
int result[2*MAX+10];
int i,j;
int bstart=0;
int len1, len2;
int k;
memset(shu1,0,sizeof(shu1));
memset(shu2,0,sizeof(shu2));
memset(result,0,sizeof(result));
}
for(i=0;i<=9;i++){
multi(b[i],Muns[i],mresult);
add(Mun,mresult,Mun);
}
if(strlen(Mun)!=FM) return;
memset(amun,0,sizeof(amun));
for(i=0;i<FM;i++){
void judge(); //用来判断一个Smun数组里的数是能组成水仙花数
void main(){
int start = clock();
init();
memset(Smun,0,sizeof(Smun));//这是用来将所有的Smun数组的成员都变成0的库函数
char mresult[FM+2];
char Mun[FM+2]="0";
for(i=0;i<=9;i++){
if(Smun[i]<10){
b[i][0]=Smun[i]+'0'; b[i][1]='\0';
}
else{
b[i][0]=Smun[i]/10+'0'; b[i][1]=Smun[i]%10+'0'; b[i][2]='\0';}
bstart=1;
}
}
muresult[k]='\0';
if(!bstart){
muresult[0]='0';
muresult[1]='\0';
}
}
void add(char *num1,char *num2,char *adresult){
for(i=2;i<=9;i++){
for(j=0;j<FM;j++)
multi(M
}
void multi(char *num1,char *num2,char *muresult){
int shu1[MAX+10];
int shu2[MAX+10];
for(i=0;i<len1;i++){
for(j=0;j<len2;j++)
result[i+j]+=shu1[i]*shu2[j];
}
for(i=0;i<2*MAX;i++){
if(result[i]>=10){
result[i+1]+=result[i]/10;
j=0;
len1=strlen(num1);
for(i=len1-1;i>=0;i--)
shu1[j++]=num1[i]-'0';
j=0;
len2=strlen(num2);
for(i=len2-1;i>=0;i--)
shu2[j++]=num2[i]-'0';
flower(0);
printf("\n%d %d毫秒\n",N,clock()-start);
}
void flower(int m){
int i;
if(M==0) {
N++; judge(); return;
}
if(M<0) return;
if(m==10) return; //从0的个数考虑,一直到9。
bstart=1;
}
}
adresult[k]='\0';
}
shu1[j++]=num1[i]-'0';
j=0;
for(i=strlen(num2)-1;i>=0;i--)
shu2[j++]=num2[i]-'0';
for(i=0;i<MAX+1;i++){
shu1[i]+=shu2[i];
if(shu1[i]>=10){
#include<stdio.h>
#include<string.h>
#include<time.h>
#define MAX 30
#define FM 21//改变FM的值可以得到21位以下所有的花朵数
char Muns[10][FM+2]={"0","1","1","1","1","1","1","1","1","1"}; //用来保存存储0~9的21次的字符数组