C語言程式設計100例之(4):水仙花數

来源:https://www.cnblogs.com/cs-whut/archive/2019/11/14/11854563.html
-Advertisement-
Play Games

例4 水仙花數 題目描述 一個三位整數(100~999),若各位數的立方和等於該數自身,則稱其為“水仙花數”(如:153=13+53+33),找出所有的這種數。 輸入格式 沒有輸入 輸出格式 若幹行,每行1個數字。 輸入樣例 無 輸出樣例 153 * * * ... * * * (輸出被和諧了) ( ...


例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;    

習題4

4-1  子數整數

        本題選自洛谷題庫 (https://www.luogu.org/problem/P1151)

題目描述

對於一個五位數a1a2a3a4a5,可將其拆分為三個子數:

sub1=a1a2a3

sub2=a2a3a4

sub3=a3a4a5

例如,五位數20207可以拆分成

sub1=202

sub2=020(=20)

sub3=207

現在給定一個正整數K,要求你編程求出10000到30000之間所有滿足下述條件的五位數,條件是這些五位數的三個子數sub1 ,sub2 ,sub3都可被K整除。

輸入格式

一個正整數K

輸出格式

每一行為一個滿足條件的五位數,要求從小到大輸出。不得重覆輸出或遺漏。如果無解,則輸出“No”。

輸入樣例

15

輸出樣例

22555

25555

28555

30000

         (1)編程思路。

        本題關鍵是分離出一個五位數n的三個子數sub1 ,sub2 和sub3。由於sub1是n的高3位數,因此,sub1=n/100;sub2是n的中間3位數,因此,sub2=n/10%1000;sub3是n的低3位數,因此,sub3=n%1000。

         用迴圈for (n=10000;n<=30000;n++)對每個五位數n進行窮舉判斷即可。

        (2)源程式。

#include <stdio.h>

int main()

{

         int i,sub1,sub2,sub3,k,f=0;

        scanf("%d",&k);

        for (i=10000;i<=30000;i++)

        {

                   sub1=i/100;

                   sub2=i/10%1000;

                   sub3=i%1000;

                   if (sub1%k==0 && sub2%k==0 && sub3%k==0)

                   {

                            printf("%d\n",i);

                            f=1;

                   }

         }

         if (f==0) printf("No\n");

   return 0;

}

 

4-2  4位分段和平方數

題目描述

一個4位自然數分為前後兩個2位數,若該數等於所分兩個2位數和的平方,則稱為4位分段和平方數。例如,2025=(20+25)2

編寫程式求出所有4位分段和平方數。

輸入格式

沒有輸入

輸出格式

若幹行,每行1個數字。

輸入樣例

輸出樣例

2025

* * *

...

* * *

(輸出被和諧了)

         (1)編程思路1。

         對所有的4位整數n進行窮舉,n的範圍為1000~9999,共9000個數。對每個數n,分離出高兩位數x(x=n/100)和低兩位數y(y=n%100),然後進行判斷,若滿足n==(x+y)*(x+y),則n是一個4位分段和平方數。

       (2)源程式1。

#include <stdio.h>

int main()

{

         int n,x,y;

         for(n=1000;n<=9999;n++)

         {

                   x=n/100;

                   y=n%100;

                   if (n==(x+y)*(x+y))

                            printf("%d\n",n);

         }

    return 0;

}

           (3)編程思路2。

         思路1的窮舉次數為9000次。實際上,由於4位分段和平方數一定首先是一個平方數,因此只需要窮舉4位數中的平方數即可,即窮舉sqrt(1000)~sqrt(9999)之間的數a,在迴圈體中,先計算出4位數n=a*a,再分離出高兩位數x(x=n/100)和低兩位數y(y=n%100),然後進行判斷,若滿足a==(x+y),則n是一個4位分段和平方數。顯然,這樣窮舉,迴圈次數會大為減少。

        (4)源程式2。

#include <stdio.h>

#include <math.h>

int main()

{

         int a,n,x,y;

         for(a=(int)sqrt(1000);a<=(int)sqrt(9999);a++)

         {

                   n=a*a;

                   x=n/100;

                   y=n%100;

                   if (a==x+y)

                            printf("%d\n",n);

         }

    return 0;

}

 

4-3  特定的四位數

題目描述

有這樣一些特定的四位數,它的千位數字與十位數字之和等於百位數字與個位數字之積。例如,3136,  3+3=1*6 ,故3136就是一個特定的四位數。

輸入格式

一個正整數K(1111<=K<=9999)

輸出格式

一個不大於K的最大的特定四位數。

輸入樣例

8000

輸出樣例

7921

       (1)編程思路。

        從k開始對四位數i進行窮舉,對每個四位數i分離出千位a(a=i/1000)、百位b(b=(i-a*1000)/100)、十位c(c=(i-a*1000-b*100)/10)和個位d(d=i%10)。

      (2)源程式。

#include<stdio.h>

int main()

{

   int i,k,a,b,c,d;

   scanf("%d",&k);

   for (i=k; i>=1000; i--)

   {

      a=i/1000 ;

      b=(i-a*1000)/100;

      c=(i-a*1000-b*100)/10;

      d=i%10;

      if  (a+c==b*d)

      {

          printf("%d\n",i);

          break;

      }

   }

   return 0;

}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Mirror王宇陽 2019年11月13日 [首發] 數日沒有更新博文了,覺得不好意思了!這不是,整理了一下JavaScript的一下BOM筆記資料,今天貢獻出來!(HTML DOM也會隨後整理髮表) 筆者在接觸Js之前就聽聞Js的“牛逼”,接觸後發現只要想法夠賊,Js就能給你的賊想法復現 ~ 作者 ...
  • 2019.11.11 深圳千鋒H5前端學習筆記 ...
  • [TOC] form表單( ) 能夠獲取用戶輸入(輸入,選擇,上傳的文件) 參數 action 控制數據提交的地址 三種書寫方式 1.不寫 預設就是朝當前頁面所在的地址提交數據 2.寫全路徑(https://www.baidu.com) 3.只寫路徑尾碼( ) method 控制數據提交的方式 `f ...
  • 因為在IOS微信中在彈窗中使用input使鍵盤彈起,使彈窗的位置上移,當鍵盤關閉時頁面還在上面,彈窗位移量也在上面,只有下拉才能回到原位,這樣彈窗也消失了。我的處理辦法就是在鍵盤彈起和消失的時候,讓頁面都回到彈起之前的狀態,使用了window.scrollTo方法。 keyUpClose () { ...
  • TCP三次握手和四次揮手 TCP有6種標示:SYN(建立聯機) ACK(確認) PSH(傳送) FIN(結束) RST(重置) URG(緊急) 一、TCP三次握手 第一次握手 客戶端向伺服器發出連接請求報文,這時報文首部中的同部位SYN=1,同時隨機生成初始序列號 seq=x,此時,TCP客戶端進程 ...
  • 1、Content Type 的值類型: 1.1 application/json:消息主體是序列化後的 JSON 字元串 1.2 application/x www form urlencoded:數據被編碼為名稱/值對。這是標準的編碼格式 1.3 multipart/form data: 需要在 ...
  • 一、視頻列表中控制只允許一個視頻播放 註: call() :調用一個對象的一個方法,用另一個對象替換當前對象,例如: arrayA.call(A,args1,args2) ,即 A 對象調用 arrayA 對象的方法。 二、視頻列表播放時滑動頁面抖動 註 : app 預設最小高度: min heig ...
  • 二哥,我今年大二,看你分享的《阿裡巴巴 Java 開發手冊》上有一段內容說:“迴圈體內,拼接字元串最好使用 StringBuilder 的 append 方法,而不是 + 號操作符。”到底為什麼啊,我平常一直就用的‘+’號操作符啊!二哥有空的時候能否寫一篇文章分析一下呢? 就在昨天,一位叫小菜的讀者 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...