菜鳥記

来源:https://www.cnblogs.com/anliang-l/archive/2019/03/28/10617668.html
-Advertisement-
Play Games

題目: 對任何一個正整數 n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把 (3n+1) 砍掉一半。 當我們驗證卡拉茲猜想的時候,為了避免重覆計算,可以記錄下遞推過程中遇到的每一個數。例如對 n=3 進行驗證的時候,我們需要計算 3、5、8、4、2、1,則當我們對 n=5、8、4、2 進行驗 ...


題目:

對任何一個正整數 n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把 (3n+1) 砍掉一半。

 

當我們驗證卡拉茲猜想的時候,為了避免重覆計算,可以記錄下遞推過程中遇到的每一個數。例如對 n=3 進行驗證的時候,我們需要計算 3、5、8、4、2、1,則當我們對 n=5、8、4、2 進行驗證的時候,就可以直接判定卡拉茲猜想的真偽,而不需要重覆計算,因為這 4 個數已經在驗證3的時候遇到過了,我們稱 5、8、4、2 是被 3“覆蓋”的數。我們稱一個數列中的某個數 n 為“關鍵數”,如果 n 不能被數列中的其他數字所覆蓋。

現在給定一系列待驗證的數字,我們只需要驗證其中的幾個關鍵數,就可以不必再重覆驗證餘下的數字。你的任務就是找出這些關鍵數字,並按從大到小的順序輸出它們。

 

思路:

一開始是沒有清晰的思路的,在紙上做下草稿,發現關鍵的點在於如何判定覆蓋以及判定覆蓋後怎樣進行處理?那就用一個很笨的辦法

1.設定一個數組用來存放每個數驗證時所需計算的數字,然後將其和已知數列一一比較

2.比較過後將原數列中被覆蓋的數置零,從這點又引申出來的想法是在第一層迴圈中加入if判定是否為零,若為零可直接跳過比較,這樣也省去了不必要的步驟

遞推過程函數較為簡單,傳入n(給定數列的個數),比較數組(copy[]),返回值為int,即遞推過程中的數的個數

int callatz(int n,int copy[]){

    int i = 0;

    do{

        if(n%2==0)  n = n/2;

        else n = (n*3+1)/2;

        copy[i++] = n;

    }while (n!=1);

    i = i-1;

    return i;

}

 

 

主函數,題目要求是將結果從大到小順序輸出,那首先要把它們找出來放到數組裡,用迴圈來搞定

 

 

   int n;

    (void)scanf("%d",&n);

    int str[n];//存放已知數列

    int copy[SIZE];//存放遞推過程里的數

    for(int i = 0;i < n;i++){

        (void)scanf("%d",&str[i]);

    }

    for(int y = 0;y < n;y++){

        if(str[y]!=0){//判定是否為零,為零說明該數已被覆蓋

            int size = callatz(str[y], copy);//遞推過程中數的個數

    //開始和已知數列比較,同時更新已知數列

            for(int i = 0;i < size;i++){

                for(int z = 0;z < n;z++){

                    if(str[z]==copy[i])

                        str[z] = 0;

                }

            }

        }        

    }

 

然後定義一個新數組存放結果,進行排序然後輸出

  

    int z = 0;

    int new[n];

    for(int i = 0;i < n;i++){

        if(str[i]!=0)

            new[z++] =str[i];

    }

   //排序 最簡單的選擇排序....

    int min = 0,temp;

    

    for(int i = 0;i < z-1;i++){

        temp = i;

        for(int j = i+1;j <z;j++){

            if(new[j] > new[temp]){

                temp = j;

            }

        }

        min = new[i];

        new[i] = new[temp];

        new[temp] = min;

    }

    int i = 0;

    for(i = 0;i < z-1;i++){

        printf("%d ",new[i]);

    }

    printf("%d",new[z-1]);

    printf("\n");//輸出格式的要求

 

 

因為排序出了錯而報錯了,要重新好好研究一下排序了...基本功太汗顏了

 


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

-Advertisement-
Play Games
更多相關文章
  • 一、簡要說明 開篇說明 其實吧這是我人生中寫的第一篇博客,我也不知道怎麼排版和編輯讓博文顯示的更加美觀,現在正在學Markdown編輯語法,也是剛剛學編程的一個小菜鳥,目前是大二的在校生,我的初衷是把我平時所學的知識都像做筆記一樣寫下來,讓以後在學習更多知識的時候回來一看,舊的知識就可以鞏固回來了, ...
  • ArrayList ArrayList 是通過一個數組來實現的,因此它是在連續的存儲位置存放對象的引用,只不過它比 Array 更智能,能夠根據集合長度進行自動擴容。 假設讓我們來實現一個簡單的能夠自動擴容的數組,我們最容易想到的點就是: 實際上,ArrayList的內部實現原理也是這樣子,我們可以 ...
  • 開發世界現在有很多反設計模式的開發方式,比如使用可執行代碼文件作為配置文件。 ...
  • 一、引言 雖然springboot幫我們進行了自動配置,但配置還是不可避免的,比如最簡單的埠號,資料庫連接。但springboot的配置一般不用xml進行配置,而是yml和properties,選擇他們當然是因為他們更方便。 YAML(YAML Ain't Markup Language)是以數據 ...
  • 超詳細官方教程解析 https://blog.csdn.net/fly_yr/article/details/51540269 實戰過程: 【1】創建Scrapy項目 scrapy startproject TestDemo 若進入到相應的文件目錄下,在地址欄輸入cmd進入命令行界面,輸入以上命令, ...
  • 複習:#define 定義一個巨集#include 文件包含#if 條件防止頭文件重覆包含定義一個巨集 判斷巨集是否定義 判斷頭文件是否包含#define _STDIO_H_#include<stdio.h>#pragma once 防止頭文件重覆包含 房子頭文件的最前面多文件 .h+*.cpp函數聲明放 ...
  • 本來是考慮, $ f[x][i][0/1] $ 表示 $ x $ 子樹中有$i$個黑點,且 $ x $ 是白點/黑點。但是這裡的答案是要統計不同的子樹的貢獻的。所以就gg了。 看了題解。 應該是要設$f[x][i]$表示$x$子樹中有$i$個黑點,對答案的貢獻。 轉移的時候,就可以單獨計算出$x y ...
  • 前言: 在我們的日常生活中,常常能看見時間。如:在我們的手機里,在一些網站上也能隨處看到時間。那我們在項目的開發中,也常常涉及到時間的處理,對於我們經常會遇到和處理的問題。Java中專門為我們處理時間提供了一個重要的類 Calendar。 一、如何運用Calendar類呢? 如果想要取得時間,首先使 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...