菜鳥記

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...