1. 程式人生 > 其它 >關於暴力破解的幾個演算法題目

關於暴力破解的幾個演算法題目

技術標籤:部落格java演算法

說說暴力破解

小編打算更新演算法有關內容,一方面小編打算參加NOIP,再刷演算法題,另外也給那些想通過筆試,獲取offer的刷題者一點啟發吧。

暴力破解適用於資料量不太大,情況較少時候使用,比如一個事件只有3個可能結果,而一般規律很難求得或根本求不出,這時候就需要使用列舉方法(即暴力破解),列出可能結果,逐一進行匹配。

例如這一道題
美國的數學家維納(N.Wiener)智力早熟,11 歲就上了大學。他曾在 1935~1936 年應邀來中國清華大學講學。一次,他參加某個重要會議,年輕的臉孔引人注目。於是有人詢問他的年齡,他回答說:“我年齡的立方是個 4 位數。我年齡的 4 次方是個6 位數。這 10 個數字正好包含了從 0 到 9 這 10 個數字,每個都恰好出現 1 次。”請你推算一下,他當時到底有多年輕。

這裡要是一個個去試,工作量可不小。當然,這種重複性的工作當然要給計算機去做了

但是:注意這個題要求的變數,是年齡,意味著age是個整形,而且大致可以確定它的範圍
1<=age<=100(人口平均年齡80左右,100足夠大了)

之後思路就很簡單了,挨個遍歷,逐一檢驗,符合條件的就是結果。

這裡小編使用java語言實現,因為python雖然第3方庫很多,但是速度慢是它的一個弱點,這種題一般要求時間1s左右,python很有可能超時。除了python之外,自然首選java,速度比python快,而且也有很多模組。

回頭看這個題,要獲取長度,需要將int轉為String型別,使用length方法獲取長度,通過迴圈遍歷,不符合條件的過濾掉,這個"過濾",我們採用continue實現,最後打印出來結果,觀察即可。

public class hello{
		public static void main(String[] args){
					int age;//迴圈變數
					int a=age*age*age;
					int b=a*age;
					for(age=1;age<=100;age++){
						if((age+"").length()!=4) continue;
						if((age+"").length()!=6) continue;
						System.out.println("年齡: "+
age+" 3次冪: "+a+" 4次冪: "+b); } } }

在這裡插入圖片描述

最後結果是18

給讀者一個思考題目,有想法了可以私信發我,我會一個一個看的

羅馬數字
古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在示
大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。之所以這樣,不
是因為發明表示法的人的智力的問題,而是因為一個宗教的原因,當時的宗教禁止
在數字中出現 0 的概念!羅馬數字的表示主要依賴以下幾個基本符號:
I --> 1
V --> 5
X --> 10
L --> 50
C --> 100
D --> 500
M --> 1000
這裡,我們只介紹一下 1000 以內的數字的表示法。
單個符號重複多少次,就表示多少倍。最多重複 3 次
比如:CCC 表示 300 XX 表示 20,但 150 並不用 LLL 表示,這個規則僅適用於 I X C M。
如果相鄰級別的大單位在右,小單位在左,表示大單位中扣除小單位。
比如:IX 表示 9 ,,IV 表示 4 ,XL 表示 40, 49 = XLIX
更多的示例參見下表,你找到規律了嗎?
I = 1
II = 2
III = 3
IV = 4
V = 5
VI = 6
VII = 7
VIII = 8
IX = 9
X = 10
XI = 11
XII = 12
XIII = 13
XIV = 14
XV = 15
XVI = 16
XVII = 17
XVIII = 18
XIX = 19
XX = 20
XXI = 21
XXII = 22
XXIX = 29
XXX = 30
XXXIV = 34
XXXV = 35
XXXIX = 39
XL = 40
L = 50
LI = 51
LV = 55
LX = 60
LXV = 65
LXXX = 80
XC = 90
XCIII = 93
XCV = 95
XCVIII = 98
XCIX = 99
C = 100
CC = 200
CCC = 300
CD = 400
D = 500
DC = 600
DCC = 700
DCCC = 800
CM = 900
CMXCIX = 999
題目的要求是:請編寫程式,由使用者輸入若干個羅馬數字串,程式輸出對應的十進位制表示。
輸入格式是:第一行是整數 n,表示接下來有 n 個羅馬數字(n<100)。以後每行一個
羅馬數字。羅馬數字大小不超過 999。要求程式輸出 n 行,就是羅馬數字對應的十
進位制資料。

例如,使用者輸入:
3
LXXX
XCIII
DCCII
則程式應該輸出:
80
93
702

原創不易,還請多多支援!!!