精华内容
下载资源
问答
  • 【蓝桥杯每日一练:北斗七星数
    2022-01-17 11:11:34

    问题描述

    北斗七星数是指一个7位数,它的每个位上的数字的7次幂之和等于它本身。
    (例如:1^7+7^7+4^7+1^7+7^7+2^7+5^7=1741725)
    请写程序判断一个正整数是否是北斗七星数?

    输入格式

    输入包括多行数据,每行一个正整数。

    【注意】

    输入多行数据是一行一行输入,并不是一次性输入。

    输出格式

    对每行输入,如果是北斗七星数,输出Y,否则输出N。

    输入样例

    1741725
    1111111

    输出样例

    Y
    N

    代码

    import math
    
    while(1):
        n = [int(input())]
    
        for i in n:
            a = i % 10
            b = i // 10 % 10
            c = i // 100 % 10
            d = i // 1000 % 10
            e = i // 10000 % 10
            f = i // 100000 % 10
            g = i // 1000000
    
            if(math.pow(a,7) + math.pow(b,7) + math.pow(c,7)
               + math.pow(d,7) + math.pow(e,7) + math.pow(f,7) + math.pow(g,7)) == i:
                print('Y')
            else:
                print('N')
    

    更多相关内容
  • C++ 北斗七星数

    2022-01-19 15:32:23
    北斗七星数是指一个7位,它的每个位上的数字的7次幂之和等于它本身。 (例如:17+77+47+17+77+27+5^7=1741725) 请写程序判断一个正整数是否是北斗七星数 输入格式 输入包括多行数据,每行一个正整数 输出格式 对...

    题目描述
    北斗七星数是指一个7位数,它的每个位上的数字的7次幂之和等于它本身。
    (例如:17+77+47+17+77+27+5^7=1741725)
    请写程序判断一个正整数是否是北斗七星数
    输入格式
    输入包括多行数据,每行一个正整数
    输出格式
    对每行输入,如果是北斗七星数,输出Y,否则输出N
    输入样例
    1741725
    1111111
    输出样例
    Y
    N

    #include<iostream>
    #include<cmath>
    using namespace std;
    int main(){
    	int a,b,c,d,e,f,g,n;
    	while(cin>>n){
    		a=n%10;
    		b=n/10%10;
    		c=n/100%10;
    		d=n/1000%10;
    		e=n/10000%10;
    		f=n/100000%10; 
    		g=n/1000000%10;
    		if(n==pow(a,7)+pow(b,7)+pow(c,7)+pow(d,7)+pow(e,7)+pow(f,7)+pow(g,7)){
    			cout<<"Y"<<endl;
    		}
    		else{
    			cout<<"N"<<endl;
    		}
    	}
    	return 0;
    }
    
    展开全文
  • 北斗七星数(幂问题)

    千次阅读 2019-06-09 13:58:20
    北斗七星数是指一个7位,它的每个位上的数字的7次幂之和等于它本身。 (例如:17+77+47+17+77+27+5^7=1741725) 请写程序判断一个正整数是否是北斗七星数? 输入 输入包括多行数据,每行一个正整数 输出 对每行...

    题目描述
    北斗七星数是指一个7位数,它的每个位上的数字的7次幂之和等于它本身。
    (例如:17+77+47+17+77+27+5^7=1741725)
    请写程序判断一个正整数是否是北斗七星数?

    输入
    输入包括多行数据,每行一个正整数
    输出
    对每行输入,如果是北斗七星数,输出Y,否则输出N

    样例输入 Copy
    1741725
    1111111
    样例输出 Copy
    Y
    N

    #include <iostream>
    #include <cmath>
    
    using namespace std;
      
    int main()
    {
    	int i;
    	while(cin>>i){
    		
    	int l=pow(10,6),r=pow(10,7),ii,j,t,a;
    
    		ii = i;	// 拷贝i的一个副本
    		for(t=j=0;j<7;j++)
    		{
    			a = ii%10; // 得到最末位的值 
    			t += a*pow(10,j)-pow(a,7);
    			ii /= 10;
    		}
    		if(t==0) cout<<"Y"<<endl;
    		else cout<<"N"<<endl;	
    		
    	}
    	return 0;
    
    }
    
    展开全文
  • 简要介绍求水仙花北斗七星数的穷举算法,并对算法进行了一定的优化。如有雷同,纯属巧合!

    水仙花数是一个三位数,它的个位、十位、百位上的数值的三次方的和等于它本身。求水仙花数的算法如下:

    算法:

    求水仙花数的直接方式是直接遍历所有的三位数(100 - 999)对每一个三位数进行判断,代码如下:

    int getNarcissisticNumber(void){
    	start = clock();
    	int num, i, j, k;
    	num = 1000;
    	while(--num >= 100){
    		i = num / 100; j = num / 10 % 10; k = num % 10;
    		if(num == i*i*i + j *j *j + k *k *k) printf("%d ", num);
    	}
    	end = clock();
    	printf("time = %f\n", ((double)end - start)/CLK_TCK);
    	return 0;
    }

    算法优化:上述算法在每次循环中都会进行三次0 - 9中三个数字的立方计算,这其中有大量的重复计算,我们可以提前计算并保存下来,在循环中直接使用,如下所示:

    int * getNarcissisticNumber2(void){
    	start = clock();
    	int num, i, j, k;
    	int arr[10];
    	for(int i = 0; i <= 9; ++i){
    		arr[i] = i * i * i;
    	}
    	num = 1000;
    	while(--num >= 100){
    		i = num / 100; j = num / 10 % 10; k = num % 10;
    		if(num == (arr[i] + arr[j] + arr[k]))  printf("%d ", num);
    	}
    	end = clock();
    	printf("time = %ld\n", end - start);
    }
    

    下面我们来看一看采用这种优化方式对北斗七星数进行优化后的算法效率:

    优化前:

    void initArr(){
    	for(int i = 0; i <= 9; i++){
    		arr[i] = i*i*i*i*i*i*i;
    	}
    }
    
    void getBigDipperNum(void){
    	start = clock();
    	unsigned num, i, j, k, l, m, n, o;
    	initArr();
    	num = 10000000;
    	while(--num >= 1000000){
    		i = num / 1000000; j = num / 100000 % 10; k = num / 10000 % 10;
    		l = num / 1000 % 10; m = num / 100 % 10; n = num / 10 % 10; o = num % 10;
    		if(num == (arr[i] + arr[j] + arr[k] + arr[l] + arr[m] + arr[n] + arr[o])){
    			printf("%u ", num);
    
    		}
    	}
    	end = clock();
    	printf("Time = %f\n", ((double) end - start) / CLK_TCK);
    }


    优化一:

    void getBigDipperNum2(void){
    	start = clock();
    	unsigned i, j, k, l, m, n, o;
    	unsigned a[10], b[10], c[10], d[10], e[10], f[10], g[10];
    	for(int i = 0; i < 10; i++){
    		a[i] = i * 1000000;
    		b[i] = i * 100000; c[i] = i * 10000;
    		d[i] = i * 1000; e[i] = i * 100; f[i] = i * 10; g[i] = i;
    	}
    	initArr();
    	for(i = 1; i <= 9; ++i)
    		for(j = 0; j <= 9; ++j)
    			for(k = 0; k <= 9; ++k)
    				for(l = 0; l <= 9; ++l)
    					for(m = 0; m <= 9; ++m)
    						for(n = 0; n <= 9; ++n)
    							for(o = 0; o <= 9; ++o){
    								if((arr[i] + arr[j] + arr[k] +
    										arr[l] + arr[m] + arr[n] + arr[o]) ==
    												(a[i] + b[j] + c[k] + d[l] + e[m] + f[n] + g[o]))
    									printf("%u%u%u%u%u%u%u ", i, j, k, l, m, n, o);
    							}
    	end = clock();
    	printf("Time = %f\n", ((double) end - start) / CLK_TCK);
    }<pre class="cpp" name="code">
    

     
     

    对上述算法再最内层循环进行了多次加法运算,我们可以化简该运算表达式,将加法提到循环外部,减少加法执行次数,如下:

    优化二:

    void getBigDipperNum3(void){
    	start = clock();
    	unsigned i, j, k, l, m, n, o;
    	unsigned t1, t2, t3, t4, t5, t6;
    	unsigned a[10], b[10], c[10], d[10], e[10], f[10], g[10];
    	for(int i = 0; i < 10; i++){
    		a[i] = i * 1000000;
    		b[i] = i * 100000; c[i] = i * 10000;
    		d[i] = i * 1000; e[i] = i * 100; f[i] = i * 10; g[i] = i;
    	}
    	initArr();
    	for(i = 1; i <= 9; ++i)
    		for(j = 0; j <= 9; ++j){
    			t6 = a[i] + b[j] - arr[i] - arr[j];
    			for(k = 0; k <= 9; ++k){
    				t5 = t6 + c[k] - arr[k];
    				for(l = 0; l <= 9; ++l){
    					t4 = t5 + d[l] - arr[l];
    					for(m = 0; m <= 9; ++m){
    						t3 = t4 + e[m] - arr[m];
    						for(n = 0; n <= 9; ++n){
    							t2 = t3 + f[n] - arr[n];
    //							if(t2 < 0) continue;
    							for(o = 0; o <= 9; ++o){
    								t1 = t2 + g[o] - arr[o];
    								if(t1 == 0)
    								printf("%u%u%u%u%u%u%u ", i, j, k, l, m, n, o);
    							}
    						}
    
    					}
    				}
    			}
    		}
    
    	end = clock();
    	printf("Time = %f\n", ((double) end - start) / CLK_TCK);
    }


    上述三种求北斗七星数的方式在i3-380M 2.53GHz机器上执行情况如下:

    9926315 9800817 4210818 1741725 Time = 0.390000
    1741725 4210818 9800817 9926315 Time = 0.125000
    1741725 4210818 9800817 9926315 Time = 0.047000

    大家可以看到明显的优化效果。

    展开全文
  • 北斗七星数-Java代码

    2019-07-23 17:09:04
    北斗七星数-Java代码实现 public static void main(String[] args) { for(int i=1000000; i<=9999999; i++) { long x1 = (long) Math.pow(((long)(i/1000000)), 7); long x2 = (long) Math.pow(((long)...
  • #include <stdio.h> int narcissistic( int number ); void PrintN( int m, int n ); int main() { int m, n; scanf("%d %d", &... if ( narcissistic(m) ) printf("%d is a narciss...
  • 特殊的你听过一些特殊的数码,如:独身, 水仙花, 四叶玫瑰, 五角星, 六合 ,北斗×××, 八仙, 九九重阳 ,十全十美。说到这你是否和我当初一样好奇呢,这是什么呢!总的概括就是他们每位的n...
  • 北斗七星

    千次阅读 2015-12-22 15:01:32
    #include #include #include #include int a; int b[100]; int c; int main() { int i,j,k; int t; int sum=0; while(scanf("%d",&a)==1){ c=1000000; //b[0]=a/c; t=c;
  • 【简答题】编写一个程序,输出九九乘法口诀表。... (1.0分)【其它】已知info=[1,2,3,4,5],请通过两种编程方法,将列表变成info=[5,4,3,2,1] (6.0分)【简答题】请编写python程序,找出所有水仙花。...
  • 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的叫做质数;否则称为合数。 好,那下面就一起书写一下吧! Z=input("请输入一个大于1的正整数:") Z=eval(Z) for i in range(2,Z): if Z%i==0: #关键...
  • C 水仙花

    2020-03-23 01:06:49
    水仙花:是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身 (例如:1^3 + 5^3+ 3^3 = 153)。...自幂包括:独身、水仙花、四叶玫瑰、五角星、六合北斗七星数、八仙、九九重阳、十...
  • Python 之有趣的自幂

    2021-12-28 22:00:45
    自幂也称自恋
  • #-*- coding: utf-8-*-import timeimport math#获取3位数的水仙花start1 = time.time()start = time.time()numbers = []for i in range(100,1000):a = i % 10b = i // 10 % 10c = i // 100if((a ** 3) + (b ** 3) ...
  • 水仙花

    2021-07-22 03:28:57
    水仙花(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋、自幂、阿姆斯壮或阿姆斯特朗(Armstrong number),水仙花是指一个 3 位数,它的每个位上的数字的 3次...
  • JavaScript求取水仙花

    千次阅读 2021-01-17 16:16:19
    一、什么是水仙花水仙花也称为超完全数字不变数、自幂、阿姆斯壮、阿姆是特朗。水仙花是指一个三位,每个位数上数字的3次幂之和等于数字它本身。水仙花是自幂的一种,三位的三次自幂才叫做水仙...
  • (例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂)自幂包括:独身、水仙花、四叶玫瑰、五角星、六合北斗七星数、八仙、九九重阳、十全十美n为1时,自幂...
  • 在数论中,水仙花(Narcissistic number),也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋、自幂、阿姆斯壮或阿姆斯特朗(Armstrong number),用来描述一个N位非负整数,其各位数字的...
  • 题目来源:Python语言程序设计(中国大学MOOC)授课老师:嵩天、黄天羽、礼欣题目描述:“3位水仙花”是指一个三位整数,其各位数字的3次方和等于该本身。例如:ABC是一个”3位水仙花”,则:A的3次方+B的3次方...
  • 求不超过n的所有自恋(包括水仙花),本篇只求到了七位数,可用同样的方法继续求
  • (例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂)n为1时,...n为7时,自幂称为北斗七星数。n为8时,自幂称为八仙。n为9时,自幂称为九九重阳。n为10时,自幂称为十全十美。/** ...
  •   求水仙花是计算机编程语言学习过程中常见的一个题目,类似的还有自幂、四叶玫瑰等等。这期来说一下,这些词都是什么意思,彼此之间是什么关系。   先来说一个名词,自幂。自幂是指一个 n 位数,它的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 525
精华内容 210
关键字:

北斗七星数