日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Code Pratice】—— 切面条、大衍数列、门派制作、方阵转置、微生物繁殖

發布時間:2024/1/1 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Code Pratice】—— 切面条、大衍数列、门派制作、方阵转置、微生物繁殖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Date:2022?10?01\color{FF99FF}{Date:2022-10-01}Date2022?10?01

Gaffes\color{FF99FF}{Gaffes}Gaffes is\color{FF99FF}{is}is accidentally\color{FF99FF}{accidentally}accidentally say\color{FF99FF}{say}say the\color{FF99FF}{the}the truth!\color{FF99FF}{truth!}truth!

文章目錄

  • 🍓1. 切面條🍓
    • 🍇題目🍇
    • 🍇思路🍇
    • 🍇代碼🍇
  • 🍎2. 大衍數列🍎
    • 🍆題目 🍆
    • 🍆思路🍆
    • 🍆代碼 🍆
  • 🍅3. 門牌制作🍅
    • 🌸題目🌸
    • 🌸思路🌸
    • 🌸代碼🌸
  • 🥭4. 方陣轉置🥭
    • 🌷題目🌷
    • 🌷思路🌷
    • 🌷代碼🌷
  • 🍊5. 微生物增殖🍊
    • 🌺題目🌺
    • 🌺思路🌺
    • 🌺代碼🌺

🍓1. 切面條🍓

🍇題目🍇

一根高筋拉面,中間切一刀,可以得到2根面條。如果先對折1次,中間切一刀,可以得到3根面條。如果連續對折2次,中間切一刀,可以得到5根面條。 那么,連續對折10次,中間切一刀,會得到多少面條呢?

🍇思路🍇

思路:題目的關鍵在于“對折”。對折的基礎是只有一根面條,與簡單的多根面條堆疊在一起不一樣,每一次對折時,彎曲部位都會形成一根新的面條,解題的關鍵就是找到這個規律。多列幾組數據可以更方便的找到這個規律

對折次數所得根數
01
13
25
39
417

從上面四組數據可以找出下面的規律:
對折 0 次:2根 --> 2
對折 1 次:3根 --> 2 + 2 ^0
對折 2 次:5根 --> 2 + 2^0 + 2^1
對折 3 次:9根 --> 2 + 2^0 + 2^1 + 2^2
對折 4 次:17根 --> 2 + 2^0 + 2^1 + 2^2 + 2^3
也就是說每多對折 N 次,那么就能多得到 2^(N - 1) 根面條,找到這個規律,題目就很好解了。

按照上面的規律,將對折0次到對折N次得到的面條數相加就是題目要求所得,而規律性的暴力題解,可以直接聯想到 [迭代] 和 [遞歸] 兩種方式

  • 迭代算法
    因為從對折1次時才實際增加面條數,所以遍歷次數從1開始,初始面條數為2
  • 總次數 = 2; for (i = 1; i < 對折次數; i++) {總次數 += 2^(i - 1); }
  • 遞歸算法
    相對于迭代,遞歸的方式有時候可能會比較繞,比較難理解,這里先說下怎么去更好的理解遞歸,要怎么使用遞歸
    遞歸三部曲
  • 確定遞歸函數的參數和返回值
  • 確定終止條件
  • 確定單層遞歸的邏輯
  • 🍇代碼🍇

    int CutNoodles(int i_Foldnum) {if (0 > i_Foldnum){return -1;}int o_Noodlenums = 2;#if 0/* 迭代 */for (int i = 1; i <= i_Foldnum; i++){int Singlenums = 1;/* 對折 N 次,增加 2^(N - 1) 根 */int j = i - 1;while (j--){Singlenums *= 2;}o_Noodlenums += Singlenums;}return o_Noodlenums;#else/* 遞歸 */if (0 == i_Foldnum){return o_Noodlenums;}else{return o_Noodlenums * CutNoodles(i_Foldnum - 1) - 1;}#endif }

    🍎2. 大衍數列🍎

    🍆題目 🍆

    大衍數列規律如下:

  • 其奇數項的值是序號平方減一再除2
  • 其偶數項的值是序號平方再除2
    例子:
    0 2 4 8 12 18 24 32 40 50
  • 🍆思路🍆

    按照題目所給規律直接寫邏輯就好了

    🍆代碼 🍆

    int DYSequence(vector<int>& i_Array, int i_Length) {if (0 > i_Length){return -1;}for (int i = 1; i <= i_Length; i++){if (0 == (i % 2)){i_Array[i - 1] = (i * i) / 2; }else{i_Array[i - 1] = ((i * i) - 1) / 2;}}return 0; }

    🍅3. 門牌制作🍅

    🌸題目🌸

    小藍要為街道的住戶制作門牌號,制作的方法為每個門的制作都會先將對應的0~9這10個數字制作出來,然后再貼到門牌上
    如果要為N位住戶制作門牌號,共需要制作多少個字符2?

    🌸思路🌸

    這實際上是一個求數值每一位上的數字問題,只需要從第一位住戶開始,統計對應門牌號上數字2的位數的總和即可

    🌸代碼🌸

    int HouseNumPro(int i_HouseNum) {if (0 >= i_HouseNum){return -1;}int o_CharNum = 0;for (int i = 1; i <= i_HouseNum; i++){int j = i;while (j){if (2 == (j % 10)){o_CharNum++;}j /= 10;}}return o_CharNum; }

    🥭4. 方陣轉置🥭

    🌷題目🌷

    給定一個NxM的矩陣,求它的轉置。

    🌷思路🌷

    轉置的思路很簡單,就是長變寬,寬變長
    將原矩陣的N當作轉置后的M,原矩陣的M當作轉置后的N即可

    🌷代碼🌷

    int SquareMatrixTranspose(vector<vector<int> > i_SquMX, int i_Length, int i_Width) {if (0 > i_Length || (0 > i_Width)){return -1;}for (int i = 0; i < i_Width; i++){for (int j = 0; j < i_Length; j++){cout << i_SquMX[j][i] << "\t";}cout << endl;}cout << endl;return 0; }

    🍊5. 微生物增殖🍊

    🌺題目🌺

    假設有兩種微生物 X 和 Y
    X出生后每隔3分鐘分裂一次(數目加倍),Y出生后每隔2分鐘分裂一次(數目加倍)。
    一個新出生的X,半分鐘之后吃掉1個Y,并且,從此開始,每隔1分鐘吃1個Y。
    現在已知有新出生的 X=10, Y=89,求60分鐘后Y的數目。
    如果X=10,Y=90呢?

    🌺思路🌺

    題目給出三個關鍵信息

  • X生物每3分鐘分裂一次
  • Y生物每2分鐘分裂一次
  • 一個新生的X,半分鐘后吃掉一個Y
  • 只要按照上面三個關鍵點進行X和Y的數量計算即可,為了方便計算,關鍵信息[0.5 2 3]都擴大兩倍為整型[1 4 6]

    🌺代碼🌺

    int MicrobialReproducte(int i_Xnum, int i_Ynum, int i_Minute) {int XSum = i_Xnum;int YSum = i_Ynum;for (int i = 1; i <= i_Minute * 2; i++){if (i % 2 == 1){YSum -= XSum;}if (i % 6 == 0){XSum = XSum * 2;}if (i % 4 == 0){YSum = YSum * 2;}}return YSum; }

    總結

    以上是生活随笔為你收集整理的【Code Pratice】—— 切面条、大衍数列、门派制作、方阵转置、微生物繁殖的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。