注意怎麼盡可能減少列舉的個數和範圍
例題一:生理週期
解題思路:這題還是比較簡單的,很容易就可以想到用列舉的方式解題,條件其實就是列舉每一天,看看距離所給高峰的距離能不能同時%23 28 33 ==0就好了。但是如果這樣設計的話很明顯就要用3重迴圈時間複雜度很高,如果給的資料很大的話很有可能會溢位,所以選擇要想乙個辦法把列舉的個數或者是範圍降低。那怎麼辦呢?
答案是:跳著找。因為每兩個週期之間還要列舉相應的間隔,這個間隔是完全沒必要列舉的,所以優化的思路就是先找到比如說第乙個體力巔峰的位置,然後跳著週期找,因為要同時滿足情商週期的同時也是體力週期,直到找到了乙個兩個週期重疊的位置,後面嘗試的時候只要嘗試既是體力高峰又是情商高峰的日子就好了。雙高峰的日子出現的間隔很明顯就是兩者的最小公倍數。所以現在跳著他倆的最小公倍數去找與第三個高峰重疊的日子。
**:
1總結:這題就是告訴我們可以通過迴圈的設計減少列舉的次數。還有一些寫**怎麼寫的技巧。#include 2#
include
3using namespace std;
4int main()
15return
0;16 }
例題2:稱硬幣(poj 1013):
題目大意:
解題思路:肯定是列舉咯!那要怎麼列舉呢?就是列舉天平兩邊每一枚硬幣分別是重和輕的情況。沒每一枚硬幣假設是輕的看看假設天平情況與題目中是否符合,若不符合再假設天平為重是否符合條件。其實我覺得這個列舉是相對不明顯,不容易想到的。
**:
1 #include 2 #include 3**的解釋與總結: 首先就是資料的儲存,總共就三種的資料,所以這個地方用了二維陣列來儲存天平兩邊的硬幣(左右兩邊硬幣數相等且從a到l)和結果(即天平右邊是高還是平還是低),注意這個地方是以天平右邊的高低來判斷輕的硬幣在什麼位置。首先是case數的迴圈,裡面就是對於三個例子的迴圈,最裡面就是對每個硬幣的迴圈,每個迴圈內部是對每乙個硬幣的輕還是重進行列舉。這裡對輕重的判斷放在了乙個函式裡面。這個isfake有兩個引數,第乙個引數就是需要判斷的硬幣,第二個bool型的引數是判斷是不是light。using
namespace
std;
4char left[3][7];5
char right[3][7];6
char result[3][7];7
bool isfake(char c, bool
light) else
17switch(result[i][0
])31
return
true;32
}3334}
35int
main()
46if(isfake(c,false
))50
} 51}52
return0;
53 }
函式的迴圈內部設計了兩個指標分別指向天平的左端和右段,這裡如果是重的話,交換位置把左指標指向右邊,右指標指向左邊這樣就可以不需要寫兩邊判斷。如果是左邊高的話,且硬幣是輕的,說明輕的硬幣在左邊,strchr是用來判斷字元是不是在字串內,這裡就是判斷硬幣在不在左邊。如果是相等的說明硬幣不能在左邊或者是右邊。如果右邊低說明硬幣在左邊。如果是重的話這些情況交換,這也是為什麼在前面寫上交換的原因。
列舉的簡舉例
列舉的關鍵字是enum package com.haidai.entity 建立列舉類 public enum mycolor 建立測試類 class test 執行結果 redyellow green 獲取列舉類中的元素和值。和普通通的類類似。可以做為關係對映的一種方式來處理。package co...
列舉的簡單例題
描述 給你n根火柴棍,你可以拼出多少個形如 a b c 的等式?等式中的a b c是用火柴棍拼出的整數 若該數非零,則最高位不能是0 用火柴棍拼數字0 9的拼法如圖所示 注意 加號與等號各自需要兩根火柴棍 如果a b,則a b c與b a c視為不同的等式 a b c 0 n根火柴棍必須全部用上 分...
python例題練習
2 有1 2 3 4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?3 輸入三個整數x,y,z,請把這三個數由小到大輸出。4 判斷101 200之間有多少個素數,並輸出所有素數。5 利用遞迴方法求5 6 統計1到100 之和。7 文字進度條 8 中文文字詞頻統計 9 英文文字詞頻統計 1...