藍橋杯 花朵數

一個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.pswp.cn/news/376096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376096.shtml
英文地址,請注明出處:http://en.pswp.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…