蓝桥杯 花朵数

一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
例如:
当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。
当N=5时,92727满足条件。
实际上,对N的每个取值,可能有多个数字满足条件。
程序的任务是:求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。

如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。


优化:不管一个数是多少位,它都是由0~9这10个数字组成,所以我们可以先分别求出这10个数的各自的21次方,

           又因为10个9的21次方之和超过了21位数,所以从9个9,12个8开始一次往下运算即可


这个题意我是看懂了,上网百度了一下别人的代码,但是有三处我看不懂。


#include <iostream>
#include <stdio.h>
#include<time.h>
#include <string.h>
using namespace std;
int A[10][21],count[100][21],cnt=0;
void Get()//将0-9这10个数的每个数的21次方存入A数组
{
    memset(A,0,sizeof(A));
    for(int k=0; k<10; k++) //一共有10个数
    {
        A[k][20]=1;  //因为是乘法所以每个数的底数设为1
        int sum=0;
        for(int i=1; i<=21; i++) //21次方
        {
            for(int j=20; j>=0; j--)
            {
                sum=sum+A[k][j]*k;
                A[k][j]=sum%10;
                sum=sum/10;
            }
        }
    }
}
void Cal()
{
    int B[21]; //b[N]存从99……99到100……00之间的数 初始化为9个9后面全是8,因为10个9的21次方之和将超过21位数
    for(int i=0; i<9; i++)  B[i]=9;
    for(int i=9; i<21; i++) B[i]=8;

    while(B[0]!=0)
    {
        int flag=1;
        int sum[21]= {0},sort[21]= {0},E[10]= {0};
        for(int i=0; i<21; i++) //求B中21个数的21次方之和
        {
            int temp=0;
            for(int j=20; j>=0; j--)
            {
                temp=temp+A[B[i]][j]+sum[j];
                sum[j]=temp%10;
                temp=temp/10;
                if(j==0&&temp>0)
                {
                    flag=0;
                    break;//位数超过21位舍弃
                }
            }
            if(flag==0)break;
        }
        if(sum[0]==0) flag=0;//位数不够21位舍弃

        if(flag==1)//位数正好21位看看两个数是不是相等
        {
            for(int i=0; i<21; i++)         
                E[sum[i]]++;     //统计sum中分别有几个0到9 存到E[N]中
            for(int i=9,x=0; i>=0; i--)
                for(int j=0; j<E[i]; j++)
                    sort[x++]=i;
            //比较二者是否相等
            for(int i=0; i<21; i++)
            {
                if(B[i]!=sort[i])  //难处1:这个B不应该跟sum比较吗,关sort什么事
                {
                    flag=0;
                    break;
                }
            }
        }
        if(flag==1)//两个数相等就存起来
        {
            for(int j=0; j<21; j++)
                count[cnt][j]=sum[j];//若这个地方换成了count[cnt][j]=B[j]那结果直接就不对,根据题意B应该跟sum是一样的??????
            cnt++;
        }

        //找下一个B[N]  (找下一个B的找法我是一点都不理解啊)
        int i;
        for(i=20; i>=0; i--)
            if(B[i]!=0)
                break;
        int temp=B[i];
        while(i<21)
        {
            B[i++]=temp-1; //保证去掉重复的数  并按从大到小顺序 进行处理(尤其是这个地方直接不懂怎么去的重复的数)
        }
    }
    for(int i=cnt-1; i>=0; i--)
    {
        for(int j=0; j<21; j++)
            cout<<count[i][j];
        cout<<endl;
    }
}
int main()
{
    Get();
    Cal();
    printf("\n程序运行了%.2lf秒\n",(double)clock()/CLOCKS_PER_SEC);//只是为了测试一下程序运行的时间
    return 0;
}



转载于:https://www.cnblogs.com/MisdomTianYa/p/6581808.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 2003添加删除windows组件中无iis应用程序服务器项的解决方法

解决方法如下: 1.开始 -- 运行,输入 c:\Windows\inf\sysoc.inf,会打开这个文件;在sysoc.inf中找到"[Components]"这一段,并继续找到类 似"iisiis.dll,OcEntry,iis.inf,hide,7" 的一行字,把这一行替换为"iisiis.dll,OcEntry,iis.inf,,7"。如果已经…

java打印菱形代码_Java打印菱形高效简洁代码

importjava.util.Scanner;publicclass打印菱形{publicstaticvoidmain(String[]args){/**菱形**************************/ScannerinputScannernewScanner(System.in);System.out.prin...import java.util.Scanner;public class 打印菱形 {public static void main(String[] arg…

QT mainwindow四件套

最近在学习QT。下面总结一下mainwindow的设置步骤。 使用的平台为vs2013qt5.3.2qt-vs-addin1.2.3 1)安装软件 首先安装vs2013&#xff0c;这个不多介绍。 然后安装qt5.3.2和addin1.2.3。并设置相关环境。详细见http://tieba.baidu.com/p/3451630520?pid61264366864#6126436686…

go mysql recover_golang用panic和recover做业务流程中断的尝试

随着使用golang越来越频繁&#xff0c;发现golang有一个地方非常不方便&#xff0c;就是在错误处理方面。先来看看golang中通常的错误处理方法&#xff1a;通常的error处理package mainimport ("errors""fmt")func a() (err error) {err errors.New("…

ROC曲线【转】

ROC曲线&#xff08;Receiver Operating Characteeristic Curve&#xff09;是显示Classification模型真正率和假正率之间折中的一种图形化方法 解读ROC图的一些概念定义&#xff1a; 真正&#xff08;True Positive , TP&#xff09;被模型预测为正的正样本 假负&#xff08;F…

更改密码 sp_password

sp_password添加或更改 Microsoft SQL Server™ 登录的密码。语法sp_password[ [ old ] old_password , ]{ [new ] new_password }[, [ loginame ] login ]参数[old] old_password是旧密码。old_password为 sysname 类型&#xff0c;其默认值为 NULL。[new] new_password是新…

java eclipse oxygen_Eclipse Java Oxygen配置Tomcat

eclipse oxygen 配置tomcat 9.0第一步 装上eclipse的EE插件因为我以前学习java都是用eclipse oxygen的se版本&#xff0c;所以并不支持j2EE&#xff0c;所以第一步&#xff0c;就是要先把它升级为EE版本。有两种方法供我们选择。重新安装eclipse的EE版本。安装eclipse的EE插件。…

五大常用算法之二:动态规划算法

一、基本概念 动态规划过程是&#xff1a;每次决策依赖于当前状态&#xff0c;又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的&#xff0c;所以&#xff0c;这种多阶段最优化决策解决问题的过程就称为动态规划。 二、基本思想与策略 基本思想与分治法类似&am…

java 数组处理_JAVA操作数组

使用 Arrays 类操作 Java 中的数组Arrays 类是 Java 中提供的一个工具类&#xff0c;在 java.util 包中。该类中包含了一些方法用来直接操作数组&#xff0c;比如可直接实现数组的排序、搜索等Arrays 中常用的方法&#xff1a;1、 排序语法&#xff1a; Arrays.sort(数组名);可…

VB调用VC DLL函数

—————————————————————————VC部分—————————————————————————————————————声明 ******************************************************************************************************** extern "C&q…

java拆装_JAVA线性表拆解

线性表(List)是一种线性结构。其特点是数据元素直线的线性关系。1.线性表抽象类定义public abstract class AbsList implements Iterable&#xff0c;List{protected int length;abstract public T get(int i); //返回第i(i≥0)个元素abstract public boolean set(int i, T x);…

display:none;与visibility:hidden;的区别

display:none;不会占用任何空间 visibility:hidden;会占用隐藏前的空间大小转载于:https://www.cnblogs.com/yaser/p/4414825.html

(转)起点

要想做Java程序员&#xff0c;并不需要必须是计算机专业出身。很多人不是计算机专业却也成为计算机高手&#xff1b;有的高中生都已经小有所成&#xff0c;可称得上是合格程序员了&#xff1b;甚至很多学校初中生都能写出漂亮的应用程序。所以&#xff0c;Java程序员的起点要求…

以太网 数据包速率计算方法

以太网 数据包速率计算方法 我们知道1个千兆端口的线速包转发率是1.4881MPPS, 百兆端口的线速包转发率是0.14881MPPS&#xff0c;这是国际标准&#xff0c;但是如何得来的呢&#xff1f; 具体的数据包在传输过程中会在每个包的前面加上64个&#xff08;前导符&#xff09;pream…

linux 多个java_linux 同时出现两个java进程,新手~ 请详细说明,这个是怎么回事。 我就装了一个jdk...

首先Tomcat是用java开发的&#xff0c;所以它的开始和停止的命令都是用java来执行的。你执行一下ps -ef |grep tomcat如果输出&#xff1a;sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.managerorg.apache.juli.ClassLoaderLogManager -Djava.en…

ISP与IAP的区别

转&#xff1a; ISP&#xff08;In-System Programming&#xff09;在系统可编程&#xff0c;指电路板上的空白器件可以编程写入最终用户代码&#xff0c; 而不需要从电路板上取下器件&#xff0c;已经编程的器件也可以用ISP方式擦除或再编程。IAP&#xff08;In-Application P…

【转】手把手实现企业级开源监控软件cacti+nagios+ntop整合(图解)

http://freeze.blog.51cto.com/1846439/386828转载于:https://www.cnblogs.com/nhlinkin/p/3595532.html

【BZOJ】【1041】【HAOI2008】圆周上的点

数学 orz hzwer 完全不会做…… 很纠结啊&#xff0c;如果将来再遇到这种题&#xff0c;还是很难下手啊…… 引用题解&#xff1a; 【分析】&#xff1a; 样例图示&#xff1a; 首先,最暴力的算法显而易见&#xff1a;枚举x轴上的每个点&#xff0c;带入圆的方程&#xff0c;检…

php authcode java_PHP(authcode)加密解密

//************************加密解密*************************//** $string&#xff1a; 明文 或 密文* $operation&#xff1a;DECODE表示解密,其它表示加密* $key&#xff1a; 密匙* $expiry&#xff1a;密文有效期* */function authcode($string, $operation DECODE, $key…