关于找出N位数的水仙花数的程序
水仙花数c语言实现代码
任务二报告v1.2 前言:本次任务我使用的是c语言(其他语言不熟悉...汗颜)。
源码:#include<stdio.h>int main(){int a,b,c,d,e,f,g,h,i,j,k,l;printf("10000以内的水仙花数:");printf("四位数有:");for(a=1000;a<=9999;a++)for(b=0;b<=9999;b++)for(c=0;c<=9999;c++)if(a*100000000+b*10000+c==a*a*a+b*b*b+c*c*c) printf("%d%d%04d ",a,b,c);printf("三位数有:");for(f=100;f<=999;f++)for(d=0;d<=999;d++)for(e=0;e<=999;e++)if(f*1000000+d*1000+e==f*f*f+d*d*d+e*e*e)printf("%d%d%03d ",f,d,e);printf("二位数有:");for(g=10;g<=99;g++)for(h=0;h<=99;h++)for(i=0;i<=99;i++)if(g*10000+h*100+i==g*g*g+h*h*h+i*i*i)printf("%d%d%02d ",g,h,i);printf("一位数有:");for(j=1;j<=9;j++)for(k=0;k<=9;k++)for(l=0;l<=9;l++)if(j*100+k*10+l==j*j*j+k*k*k+l*l*l)printf("%d%d%d ",j,k,l);}运行结果:设计思路:刚拿到这个题目的时候,我想到先定义三个变量i,j,k,我将i设定为从1到99的任意整数,j和k为0到9的任意整数,根据条件来判断,便得出了结果,用时为0.55秒,之后我考虑能不能将结果优化,因为结果中最大的为四位数,如果i为两位数,则其立方不能超过10000,否则就不会成立,于是我将10000开三次方,得出最大的立方不超过10000的两位数是21,于是我把21带入i的循环语句中,成功缩短了时间,最后结果的时间降为0.016秒。
c语言水仙花数的解题思路
c语言水仙花数的解题思路一、水仙花数的定义和特点水仙花数,又称阿姆斯特朗数,是指一个n位数,其每个位上的数字的n 次幂之和等于它本身。
例如,153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3。
水仙花数具有以下特点:1.每一位数字都不重复;2.通常情况下,水仙花数的位数较多;3.目前已知的水仙花数都是正整数。
二、C语言解题思路要找到一个n位数是否为水仙花数,可以通过遍历每一位数字,计算其n 次幂之和,然后与原数进行比较。
若相等,则为水仙花数;否则,不是。
由于位数较多,可以采用递归或循环方法进行计算。
三、算法实现步骤1.输入一个整数n,表示要查找的水仙花数的位数;2.输入一个整数m,表示要判断的数;3.初始化一个结果变量res为0;4.遍历m的每一位数字,从右到左,分别计算其n次幂之和:1) 提取当前位数字;2) 计算该位数字的n次幂;3) 将计算结果累加到res上;5.判断res与m是否相等,若相等,则输出m是水仙花数,否则输出不是。
四、代码示例与解析以下是一个简单的C语言实现:```c#include <stdio.h>int is_narcissistic_number(int m, int n) { int res = 0;while (m) {int digit = m % 10;res += pow(digit, n);m /= 10;}return res == m;}int main() {int n, m;printf("请输入位数n:");scanf("%d", &n);printf("请输入要判断的数m:");scanf("%d", &m);if (is_narcissistic_number(m, n)) {printf("%d是水仙花数。
", m);} else {printf("%d不是水仙花数。
C语言水仙花数(循环).doc
C语言水仙花数(循环).doc
什么是水仙花数?
所谓水仙花数是指一个三位数的各位数字的立方和等于该数本身。
例如153是一个水
仙花数,因为153=1的三次方+5的三次方+3的三次方。
如何查找水仙花数?
下面介绍一种常见的方法,使用循环结构查找水仙花数。
首先定义一个3位数的变量n,从100开始依次递增,到999结束。
每个n都要判断其是否是水仙花数。
判断方法是先将n的个位上的数字、十位上的数字、百位上的数字分别
取出来,然后逐个立方相加,得到一个sum值。
如果sum等于n,就说明n是水仙花数。
下面是C语言实现水仙花数的代码示例:
代码说明:
1. 变量n表示当前要判断的数值,初始值为100,最大值为999。
2. 通过取模、整除等运算依次得到n的个位、十位、百位上的数字。
3. 分别计算各位数字的立方和,得到sum值。
4. 如果sum等于n,就输出n。
否则继续进行下一次循环。
5. 循环结束后,程序退出。
运行结果:
153
370
371
407
总结:
本文介绍了使用循环结构查找水仙花数的方法,使用C语言实现了水仙花数的查找。
通过本文的学习,读者可以了解到循环结构的基本语法、变量赋值、条件判断等基础知识,同时也可以巩固对算法思想的理解和应用能力。
c语言水仙花数作业,c语言水仙花数(c语言水仙花数的编程)
c语⾔⽔仙花数作业,c语⾔⽔仙花数(c语⾔⽔仙花数的编程)C语⾔计算出"⽔仙花"数,代码如下:运⾏结果如下:扩展资料 解题思路:这⾥提供了⼀种算法,即使⽤三个for循环确定三位数字,最外层的for循环即确定百位上的数字.“⽔仙花数”程序怎么写啊代码如下:#include int main() { printf("输出⽔仙花数:\n"); int i=100; for( ; i<1000; i++){ int num_0 = i%10; int num_1 =i/10%10; int num_2 = i/10/10%10; if.#include void main() { int a,b,c,s; s=a*100+b*10+c; for(a=1;aLZ你好~ ⾸先你要理解啥是⽔仙花数:⽔仙花数是指⼀个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本⾝。
(例如:1^3 + 5^3 + 3^3 = 153) 以上来⾃百.#include main() { int n,i,j,k; for(n=100;n把if语句块套在for循环⾥才⾏。
#include main() { int n,i,j,k; for(n=100;n<. k="n%10;" if .>最近学C语⾔ 作业⾥⾯有个写程序求⽔仙花数的 尝试得写了写 #include #.#include#include main() { int a,b,c,Y; int sum=100; while(sum<=999) { 百a=sum/100; b=sum%100/10; c=sum%10;Y=a*a*a+b*b*b+c*c*c; if(Y==sum)//判断.现写⼀个程序给我可以吗?跟⽹上其他有点差别就⾏了,不要复制粘贴的。
.#include int main(int argc, char **argv) { int i; int g ,s,b; //定义个位制,⼗位,百位上的知数 for(i=100;i<1000;i++){ //从100到1000查询⽔仙花数 g=i%10; //取出.严格的⽔仙花是三位数,并且其每位数的三次⽅的和等于它的本⾝。
水仙花数
1.“水仙花数”是指这样的数,其各位数字的立方和等于该数本身.编写程序求100至999的范围内有多少个水仙花数#include<stdio.h>main(){int dig,k,m,s,count;count=0;for(k=100;k<=999;k++){dig=0;s=0;dig=k/100;s=s+dig*dig*dig;m=k%100;while(m!=0){dig=m%10;s=s+dig*dig*dig;dig=m/10;s=s+dig*dig*dig;m=0;}if(s==k){count++;}}printf("%d\n",count);}2.(x,y,z)满足方程:x^2+y^2+z^2=55^2(注:要求x>y>z);则(x,y,z)称为方程的一个解.试求方程的整数解(包括负整数解)的个数.#include<stdio.h>main(){int x,y,z,s,n=0;for(x=-55;x<=55;x++)for(y=-55;y<x;y++)for(z=-55;z<y;z++){s=x*x+y*y+z*z;if(s==3025)n++;}printf("%d\n",n);}3.”水仙花数”是指这样的数,其各自数字的立方和等于该数本身.编写程序求100至400的范围内有多少的水仙花数. #include<stdio.h>main(){int dig,k,m,s,count;count=0;for(k=100;k<=400;k++){dig=0;s=0;dig=k/100;s=s+dig*dig*dig;m=k%100;while(m!=0){dig=m%10;s=s+dig*dig*dig;dig=m/10;s=s+dig*dig*dig;m=0;}if(s==k){count++;}}printf("%d\n",count); }4.50元的整币兑换成5元,2元,1元币值(三种币值均有,缺少一种或两种都计算在内)的方法有多少种.#include<stdio.h>main(){int a,b,c,s,count=0;for(a=0;a<=10;a++)for(b=0;b<=25;b++)for(c=0;c<=50;c++){s=5*a+2*b+c;if(s==50)count++;}printf("%d\n",count);}5.A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数.求130<A+B+C<150且A>B>C的倒勾股数有多少组.#include<stdio.h>main(){int A,B,C,n=0;for(A=1;A<=100;A++)for(B=1;B<A;B++)for(C=1;C<=B;C++){if((A+B+C)>130&&(A+B+C)<150&&(1.0/(A*A)+1.0/(B* B)==1.0/(C*C)))n++;}printf("%d\n",n);}6.爱婴斯坦走台阶:有一台阶,如果每次走二阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶; 如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?#include<stdio.h>main(){long int x;for(x=0;x<=10000000;x++){if(x%2==1&&x%3==2&&x%4==3&&x%5==4&&x%6 ==5&&x%7==0)break;}printf("%ld\n",x);}7.编程求[120,140]之间的弦数的个数(若某正整数的平方等于另两个正整数平方值和,则称该数是弦数.例如3^2+4^2=5^2,因此5是弦数).#include<stdio.h>main(){int i,j,k,s,count=0;for(k=121;k<=140;k++)for(i=1;i<140;i++)for(j=1;j<=i;j++){s=i*i+j*j;if(s==k*k){printf("%d ",k);count++;}}printf("[121,140]之间的弦数个数是:%d\n",count);}8.编写程序,计算1000以内有多少个这样的数,其十位为6且能被8整除.#include<stdio.h>main(){int a,b,c,i;int count=0;for(i=10;i<1000;i++){a=i%100;b=a/10;c=i%8;if(b==6&&c==0)count++;}printf("1000以内有%d个这样的数\n",count);}9.编写程序,计算在[0,60]的范围内有多少个数,其每位数的乘积大于每位数的和.#include<stdio.h>main(){int a,b,i;int count=0;for(i=0;i<=60;i++){a=i/10;b=i%10;if(a*b>a+b)count++;}printf("%d\n",count);}10.编写程序,求1到5000之间的能被5整除前若干个偶数之和,当和值大于500时退出,输出该和值.#include<stdio.h>main(){int i,a,s=0;for(i=1;i<=5000;i++){a=i%10;if(a==0)s+=i;if(s>500)break;}printf("%d\n",s);}11.编写程序,求出1~7000以内能被3或7整除的数的个数. #include<stdio.h>main(){int i,n=0;for(i=1;i<=7000;i++){if(i%3==0||i%7==0)n++;}printf("%d\n",n);}12.编写程序,求出100到500之间同时满足初3余2和处5余3条件的数的个数.#include<stdio.h>main(){int i,a,b,count=0;for(i=100;i<=500;i++){a=i%3;b=i%5;if(a==2&&b==3)count++;}printf("%d\n",count);}13.编写程序.求出3到100之间的所有非偶数非素数的数之和.main(){int a,i,j,s=0;for(i=3;i<=100;i++){for(j=2;j<i;j++){a=i%j;if(a==0)break;}if(a==0&&i%2!=0)s+=i;}printf("%d\n",s);}14.编写程序,求共有几组i,j,k符合算式ijk+kji=1534,其中I,j,k是[0,9]之间的一个整数且i<k.main(){int i,j,k,s=0,count=0;for(j=0;j<=9;j++)for(k=0;k<=9;k++)for(i=0;i<k;i++){s=i*101+j*20+k*101;if(s==1534)count++;}printf("%d\n",count);}15.编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是11的倍数,且A=B+C,即第2位数加上第3位数等于第1位数.#include<stdio.h>main(){int i,a,b,c,count=0;for(i=1000;i<10000;i++)a=i/1000;b=(i%1000)/100;c=((i%1000)%100)/10;if((i%11==0)&&(a-b-c==0))count++;}printf("%d\n",count);}16.编写程序,求三位数的偶数中,所有各位数字之和是15的倍数的数的个数.#include<stdio.h>main(){int i,a,b,c,count=0;for(i=100;i<1000;i+=2){a=i/100;b=(i%100)/10;c=(i%100)%10;if((a+b+c)%15==0)count++;printf("%d\n",count);}17.编写程序,求四位数的奇数中,所有各位数字之积(且不为0)是125的倍数的数的和.#include<stdio.h>main(){int a,b,c,d,i,s=0;for(i=1001;i<10000;i+=2){a=i/1000;b=(i%1000)/100;c=((i%1000)%100)/10;d=((i%1000)%100)%10;if(((a*b*c*d)%125==0)&&(a*b*c*d)!=0)s+=i;}printf("%d\n",s);}18.编写程序,求一正整数等差数列的前六项的和,该数列前四项之和是26,四项之积是880.#include<stdio.h>main(){int a,d;for(a=1;a<=6;a++)for(d=1;d<=4;d++){if(4*a+6*d==26&&a*(a+d)*(a+2*d)*(a+3*d)==880)printf("sum=%d\n",6*a+15*d);}}19.编写程序,求在5000以内能被17或者23整除的正整数个数.#include<stdio.h>main(){int i,count=0;for(i=1;i<5000;i++){if((i%17==0)||(i%23==0))count++;}printf("%d\n",count);}20.编写程序.求在四位数的偶数中.所有各位数字之和是30的倍数的数的和.#include<stdio.h>main(){int i,a,b,c,d,s=0;for(i=1000;i<10000;i+=2){a=i/1000;b=(i%1000)/100;c=((i%1000)%100)/10;d=((i%1000)%100)%10;if((a+b+c+d)%30==0)s+=i;}printf("%d\n",s);}21.编写程序.统计1000~9999之间的所有满足以下条件的四位数的个数.该书是一个完全平方数,且第1,2位数字之和为12,第3,4位数字之和为24.#include<stdio.h>main(){int s,s1,s2,s3,s4,i,count=0;for(i=32;i<100;i++){s=i*i;s1=s/1000;s2=s%1000/100;s3=s%1000%100/10;s4=s%1000%100%10;if(s1+s2==12&&s3*s4==24)count++;}printf("%d\n",count);}22.编写程序,已知:S=1+3+5+7+9+……,求S不大于9000的最大值.#include<stdio.h>main(){int i=1,s=0;while(s<=9000){s+=i;i+=2;}s=s-i+2;printf("s=%d\n",s);}23.编写程序,已知:S=2+4+8+16+32+…..,求S不大于1500的最大值.#include<stdio.h>main(){int i=1,s=0;while(s<1500){i=2*i;s=s+i;}s=s-i;printf("s=%d\n",s);}24.除1和他本身外,不能被其他整数整除的正整数称为素数(注:1不是素数,2是素数).若两数之差为2,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数.#include "stdio.h"#include "math.h"int sushu(int n){ int i;for(i=2;i<=sqrt(n);i++)if(n%i==0)return 0;return 1;}main(){int i,count=0;for(i=31;i<=601;i++)if(sushu(i)&&sushu(i-2))count++;printf("%d\n",count);getch();}25.当m值为50时,计算下列公式的值:T=1-1/2-1/3-1/4-…..-1/m.要求:按四舍五入的方式精确到小数点后四位.#include<stdio.h>main(){int i;double T=1;for(i=2;i<=50;i++){T=T-1.0/i;}printf("%.4f\n",T);}26,当n的值为25时,计算下列公式的值:s=1+1/1!+1/2!+1/3!+1/n!.要求:按四舍五入的方式精确到小数点后四位.#include<stdio.h>main(){int i;float t=1,s=1;for(i=1;i<=25;i++){t=t*1.0/i;s=s+t;}printf("%.4f\n",s);}27.斐波那契数列的前两项是1,1,其后每一项都是前面两项之和,求:10000000以内最大的斐波那契额数?#include<stdio.h>main(){int s1=1,s2=1,a=0,i=0,t;while(a<10000000){a=s1+s2;i=a;t=s2;s2=i;i=t;t=s1;s1=i;i=t;}printf("%d\n",a-i);}28.计算y=1+2/3+3/5+4/7+…….+n/(2*n-1)的值,n=50,要求:按四舍五入的方式精确到小数点后两位,#include<stdio.h>main(){int n=50,i;float y=0;for(i=1;i<=n;i++){y=y+(float)i/(2*i-1);}printf("y=%.2f\n",y);}29 计算Y=X/1!-X^3/3!+X^5/5!-X^7/7!+……前20项的值(已知:X=2)。
n位数水仙花数c语言程序
n位数水仙花数C语言程序水仙花数是指一个n位数,它的各位数字的n次方之和等于它本身。
例如,153是一个3位数水仙花数,因为1^3 + 5^3 + 3^3 = 153。
本篇文章将介绍如何使用C语言编写一个程序来找出n位数水仙花数。
我们将逐步解释程序的实现步骤,并提供完整的源代码。
程序设计思路要找出n位数水仙花数,我们需要遍历所有可能的n位数,并检查每个数是否满足水仙花数的条件。
为了实现这个目标,我们可以按照以下步骤来设计我们的程序:1.接收用户输入的位数n。
2.使用循环生成所有可能的n位数。
3.对于每个生成的n位数,计算其各位数字的n次方之和。
4.如果计算结果等于原始数值,则将该数值打印出来。
下面是我们具体实现的C语言程序:#include <stdio.h>#include <math.h>int main() {int n, num, digit, sum, temp;printf("请输入位数n:");scanf("%d", &n);printf("%d位数的水仙花数有:\n", n);for (num = pow(10, n-1); num < pow(10, n); num++) {temp = num;sum = 0;while (temp != 0) {digit = temp % 10;sum += pow(digit, n);temp /= 10;}if (sum == num) {printf("%d\n", num);}}return 0;}程序解析让我们逐行解析上述代码,以便更好地理解程序的实现细节。
1.首先,我们包含了两个头文件:stdio.h和math.h。
stdio.h包含了输入输出函数,math.h包含了数学函数,其中包括pow()函数,用于计算幂。
水仙花数方程解法
水仙花数方程解法
水仙花数是指一个三位数,它的每个位上的数字的立方和等于它本身。
例如,153是一个水仙花数,因为1的立方加5的立方加3的立方等于153。
为了解决水仙花数问题,我们可以使用方程式解决。
设所求数为n,则其个、十、百位数字分别为n1、n2、n3,则有:
n = n1^3 + n2^3 + n3^3
根据该方程,我们可以通过枚举每个三位数的每个位上的数字,计算并判断是否为水仙花数。
当然,这种方法比较费时费力。
我们也可以采用循环来解决这个问题。
首先,我们可以使用三个循环来枚举每个三位数的每个位上的数字,然后计算并判断是否为水仙花数。
具体做法如下:
for i in range(1, 10):
for j in range(0, 10):
for k in range(0, 10):
n = i * 100 + j * 10 + k
if n == i**3 + j**3 + k**3:
print(n)
该代码通过三个循环枚举每个三位数的每个位上的数字,计算并判断是否为水仙花数,若是则输出该数。
通过这种方式,我们可以快速地找到所有的水仙花数。
除了这种方法外,我们还可以使用其他途径来解决这个问题,例
如使用递归或数论方法等。
无论采用何种方法,解决水仙花数问题的本质都在于寻找这样一种规律或方法,以便从大量的数据中快速、准确地找到需要的结果。
n位数水仙花数c语言程序
n位数水仙花数c语言程序水仙花数,又称阿姆斯特朗数,是一个三位数,其每个数字的立方和等于该数本身。
例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
今天我们将学习如何编写一个C语言程序来找到n位数的水仙花数。
首先,让我们了解一下C语言程序设计的基本思路。
我们需要使用C语言编写一个循环,用于检查每个三位数是否是水仙花数。
我们可以使用变量来存储每个数字的立方和,然后与该数本身进行比较。
接下来,我们将详细编写这个程序。
以下是一个简单的C语言程序,用于找到n位数的水仙花数:```c#include <stdio.h>int main() {int n, i, num, sum = 0;printf("请输入一个正整数n:");scanf("%d", &n);for (i = 100; i < 1000 * n; i++) {sum = 0;while (i) {sum += i % 10 * i % 10 * i % 10;i /= 10;}if (sum == i) {printf("%d位水仙花数:%d", n, i);}}return 0;}```这个程序首先导入<stdio.h>头文件,用于输入输出。
在main()函数中,我们使用printf()和scanf()函数分别提示用户输入一个正整数n,并读取用户输入的值。
接下来,我们使用一个for循环来遍历所有三位数(从100到999),并检查它们是否是水仙花数。
在循环内部,我们使用另一个for循环来迭代每个三位数的每一位数字。
我们使用取模运算符%()来获取当前位上的数字,然后将其立方加入变量sum中。
当循环结束时,我们检查sum是否等于该数本身。
如果相等,说明这是一个水仙花数,我们将其输出。
这个程序可以找到n位数的水仙花数,但请注意,由于三位数的水仙花数较少,所以程序可能需要较长时间才能找到所有的水仙花数。
用python实现寻找1000以内的水仙花数(三种方法)
⽤python实现寻找1000以内的⽔仙花数(三种⽅法)如果⼀个3位数等于其各位数字的⽴⽅和,则称这个数为⽔仙花数。
例如:153 = 1^3 + 5^3 + 3^3,因此153就是⼀个⽔仙花数。
如何求1000以内的⽔仙花数呢?⽅法⼀:先求得百、⼗、个位的数字值,再按照⽔仙花数的定义来找符合条件的数def shuixianhuashu1():for i in range(100,1000):m = i // 100 #整除获得百位数n = (i % 100) // 10 #⼗位数k = i % 10 #个位数if m**3 + n ** 3 + k ** 3 == i:print(i)⽅法⼆:将数字先转化为字符串,利⽤字符串索引找到百、⼗、个位的数字值,再按照⽔仙花数的定义来找符合条件的数def shuixianhuashu2():for i in range(100,1000):s = str(i) #将数字转化为字符串bai = int(s[0]) #百位shi = int(s[1]) #⼗位ge = int(s[2]) #个位if i == bai ** 3 + shi** 3 + ge ** 3:print(i)⽅法三:从百位数开始遍历,然后遍历⼗位数,个位数,再按照⽔仙花数的定义来找符合条件的数def shuixianhuashu3():for bai in range(1,10): #遍历百位for shi in range(0,10): #遍历⼗位for ge in range(0,10): #遍历个位x = bai*100 + shi*10 + geif x == bai ** 3 + shi ** 3 + ge ** 3:print(x)。
c语言求水仙花数的算法do while
C语言求水仙花数的算法do while1. 什么是水仙花数水仙花数是指一个三位数,它的各位数字的立方和等于它本身。
153就是一个水仙花数,因为1的立方加上5的立方加上3的立方等于153。
2. 水仙花数的求解算法为了在C语言中求解水仙花数,我们可以使用do-while循环来遍历所有的三位数,然后判断是否为水仙花数。
3. C语言实现水仙花数的算法下面是使用do-while循环实现水仙花数算法的C语言代码:```c#include <stdio.h>int m本人n() {int num, temp, rem本人nder, result = 0;num = 100;do {temp = num;while (temp != 0) {rem本人nder = temp 10;result += rem本人nder * rem本人nder * rem本人nder; temp /= 10;}if (result == num) {printf("d 是水仙花数\n", num);}result = 0;num++;} while (num < 1000);return 0;}```在这段代码中,我们使用了一个do-while循环来遍历所有的三位数,然后对每个数字进行水仙花数的判断。
在内部的while循环中,我们对数字进行取余和除以10的操作,然后计算各位数字的立方和。
如果立方和等于原数字,则输出该数字为水仙花数。
4. 运行结果当我们运行这段代码时,将会输出所有的水仙花数,结果如下:```153 是水仙花数370 是水仙花数371 是水仙花数407 是水仙花数```这证明我们的算法是正确的,能够顺利地求解水仙花数。
5. 总结通过上面的示例,我们使用了C语言的do-while循环来实现求解水仙花数的算法。
通过该算法,我们可以轻松地找到所有的水仙花数,并且可以应用在更复杂的问题中。
循环结构参考程序
1、编写一个程序,输入一个正整数N(N大于等于100小于等于999),求出100~N之间的所有水仙花数。
所谓的水仙花数是:如果一个三位数的个位数、十位数、百位数的立方和等于该数自身,就称这个数为水仙花数。
#include <iostream>using namespace std;int main( ){int n,i,g,s,b;cin>>n;for(i=100;i<=n;i++){g=i%10;s=i/10%10;b=i/100;if(g*g*g+s*s*s+b*b*b==i)cout<<i<<" ";}return 0;}2、编写程序,从n个整数中找到最小的数并输出。
输入分2行:第一行为n的值,第二行为n个整数。
#include <iostream>using namespace std;int main( ){int x,n,min,i;cin>>n;cin>>x;min=x;for(i=2;i<=n;i++){cin>>x;if(x<min)min=x;}cout<<min;return 0;}3、编写程序找出一个正整数n的各位数字中最大的数字,n由键盘输入。
#include <iostream>using namespace std;int main( ){int n,max,t;cin>>n;max=0;while(n>0){t=n%10;if(t>max)max=t;n/=10;}cout<<max;return 0;}4、有一分数序列,计算该序列的前n项和,n由键盘输入。
#include <iostream>using namespace std;int main( ){int i,n,p,q,temp;float s=0;cin>>n;p=2;q=1;for(i=1;i<=n;i++){s+=1.0*p/q;temp=p+q;q=p;p=temp;}cout<<s;return 0;}5、编写程序求a + aa + aaa + aaaa +…+ aaa…a(n个a)之和,其中a和n由键盘输入。
C语言程序设计100例之(4):水仙花数
C语言程序设计100例之(4):水仙花数例4 水仙花数题目描述一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数。
输入格式没有输入输出格式若干行,每行1个数字。
输入样例无输出样例153* * *...* * *(输出被和谐了)(1)编程思路1。
对三位数n(n为100~999之间的整数)进行穷举。
对每个枚举的n,分解出其百位a (a=n/100)、十位b(b=n/10%10)和个位c(c=n%10),若满足a*a*a+b*b*b+c*c*c== n,则n是水仙花数。
(2)源程序1。
#include <stdio.h>int main(){int n, a, b, c; //n、a、b和c分别为三位数自身及其百位、十位和个位for(n=100 ;n<=999;n++){a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c== n)printf("%d\n",n);}return 0;}(3)编程思路2。
用一个三重循环对一个3位数的百位a(a的范围为1~9)、十位b(b的范围为0~9)和个位c(c的范围为0~9)进行穷举,在循环体中,计算出3位数n(n=100*a+10*b+c),然后进行判断,若满足a*a*a+b*b*b+c*c*c== n,则n是水仙花数。
(4)源程序2。
#include <iostream>using namespace std;int main(){int n, a, b, c; //n、a、b和c分别为三位数自身及其百位、十位和个位for(a=1 ;a<=9;a++)for (b=0; b<=9;b++)for(c=0;c<=9;c++){n=100*a+10*b+c;if(a*a*a+b*b*b+c*c*c== n)printf("%d\n",n);}return 0;}习题44-1 子数整数本题选自洛谷题库(https:///problem/P1151)题目描述对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:sub1=a1a2a3sub2=a2a3a4sub3=a3a4a5例如,五位数20207可以拆分成sub1=202sub2=020(=20)sub3=207现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1 ,sub2 ,sub3都可被K整除。
水仙花数实验报告
一、实验目的1. 了解水仙花数的概念及其特性。
2. 掌握C语言编程解决实际问题的方法。
3. 提高逻辑思维和编程能力。
二、实验原理水仙花数(Narcissistic number)又称为自恋数、自幂数、阿姆斯壮数(Armstrong number),它是指一个n位数,其各位数字的n次方和等于该数本身。
例如:153是一个三位数,其各位数字的立方和等于153,即1^3 + 5^3 + 3^3 = 153。
三、实验内容1. 编写C语言程序,找出1000以内的所有水仙花数。
2. 分析程序运行过程,总结水仙花数的规律。
四、实验步骤1. 创建一个新的C语言项目,命名为“水仙花数探究”。
2. 在项目中创建一个名为“main.c”的源文件。
3. 在“main.c”文件中编写以下代码:```c#include <stdio.h>#include <math.h>int main() {int num, hun, ten, ge, sum;for (num = 100; num < 1000; num++) {hun = num / 100; // 百位数ten = (num % 100) / 10; // 十位数ge = num % 10; // 个位数if (pow(hun, 3) + pow(ten, 3) + pow(ge, 3) == num) {printf("%d\n", num);}}return 0;}```4. 编译并运行程序,观察输出结果。
五、实验结果与分析1. 运行程序后,输出以下水仙花数:1533703714072. 分析程序运行过程,总结水仙花数的规律:(1)水仙花数一定是一个三位数。
(2)对于任意一个三位数,可以通过拆分百位、十位和个位数字,计算其各位数字的立方和,然后判断是否等于原数。
(3)在1000以内的所有水仙花数中,个位数字只能是0、1、5、6、7、8、9。
python打印水仙花数(基础版)
python打印⽔仙花数(基础版)
⽔仙花数是指⼀个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本⾝。
例如:153是⼀个"⽔仙花数",因为153=1的三次⽅+5的三次⽅+3的三次⽅。
利⽤for循环输出1000以内得⽔仙花数。
(进阶版见:)
"""
i=t=100#初始化i,t的值为100
list1=[]#定义列表list1装载1000以内的n位数(n≥3 )
list2=[]#定义列表list2装载1000以内的⽔仙花数
#遍历[100,1000]的数
while i <=1000:
list1.append(i)#将遍历的数添加到list1中
i+=1
#遍历list1中的数
for t in list1:
#判断为数字为3位数还是4位数
if t < 1000:
g=t%10#输出个位数
b=t//100#输出三位数中的百位数
s=(t//10)%10#输出⼗位数
if t == (g**3+s**3+b**3):#判断每个位上的数字的 n 次幂之和是否等于它本⾝
list2.append(t)#满⾜⽔仙花数条件,输出到list2中
elif t == 1000 :
g = t % 10#输出个位数
q=t//1000#输出四位数千位数
b=(t//100)%10#输出三位数中的百位数
s=(t//10)%10#输出⼗位数
if t == (g**3+s**3+b**3+q**3):
list2.append(t)
print(list2)#输出1000以内的⽔仙花数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<iostream.h>
#include<conio.h>
//此程序可以找出任意输入的N位数中所包含的全部水仙花数
int xz(int b){int i=2,di=10;
while(i<b){di=di*10;i++;}
return di;}//不用输入函数自己利用已经确定的n的值求出其对应次幂的最小值用于取整作为底来使用
int cifang(int m,int mi){int jieguo;jieguo=m;
while(mi>1){jieguo=jieguo*m;mi=mi-1;}
return jieguo;}//此函数用于求一个数的mi次方其中m为被操作数
int kf(int k,int z){return k/z;}//利用取整求出一个数的最高次幂对应的值
int main(){int ji=0;
int n;//确定输入的n的值
int shu;//此数用于存放要寻找最高次幂的值的数
int di;//此数用于确定变化的用于取整的底
int wei;//此数用于存放所求数的某一位的值
int zuixiao;//此数是确定确定次幂的数的最小值
int zuida;//此数是确定确定次幂的数的最大值
int cifanghe=0;//此数用于存放次方的和
cout<<"请输入将要寻找水仙花数的次幂数n的值n=";
cin>>n;
shu=xz(n);
di=xz(n);
zuixiao=xz(n);
zuida=10*xz(n)-1;
while(shu>=zuixiao&&shu<=zuida)
{int quedingshu;//此数用于存放某一确定的数用于操作
int dibian;//此数用于替代对于某一具体的数的底
int cifanghe1;
cifanghe1=cifanghe;
dibian=di;
quedingshu=shu;
while(quedingshu>0){
wei=kf(quedingshu,dibian);
cifanghe1=cifanghe1+cifang(wei,n);
quedingshu=quedingshu-wei*dibian;
dibian=dibian/10;}
if(cifanghe1==shu){ji++;cout<<shu<<endl;}
shu=shu+1;}
cout<<n<<"位数中为水仙花数的数有"<<ji<<"个";
getch();
return 0;
}。