C 之練習題32

2021-06-23 02:32:51 字數 1978 閱讀 3003

1.數根可以通過把乙個數的各個位上的數字加起來得到。如果得到的數是一位數,那麼這個數就是數根。如果結果是兩位數或者包括更多位的數字,那麼再把這些數字加起來。如此進行下去,直到得到是一位數為止。

比如,對於24 來說,把2 和4 相加得到6,由於6 是一位數,因此6 是24 的數根。再比如39,把3 和9 加起來得到12,由於12 不是一位數,因此還得把1 和2 加起來,最後得到3,這是乙個一位數,因此3 是39 的數根。

任務:給定乙個正整數,輸出它的數根。

2.在乙個有12 行12 列的方形的武林世界裡,少林、武當和峨嵋三派的**們在為獨霸武林而互相廝殺。武林世界的第一行的一列格仔的座標是(1, 1),第一行第二列座標是(1,

2)……右下角的座標為(12, 12)。如圖:

少林派**總是在同一列回不停地行走。先往下走,走到頭不能再走時就往上走,再到頭則又往下走……比如,(1, 1) -> (2, 1) -> (3, 1)。

武當派**總是在同一行來回不停地行走。先往右走,走到頭不能再走時就往左走,再到頭則又往右走……比如,(2, 1) -> (2, 2) -> (2, 3)。

峨嵋派**總是在右下-左上方向來回不停走,先往右下方走,走到頭不能再走時就往左上方走,再到頭則又往右下方走……比如,(1, 1) -> (2, 2) -> (3, 3)。峨嵋**如果位於(1, 12)或(12, 1),那當然只能永遠不動。每次走動,每個**必須,而且只能移動乙個格仔。

每名**有內力、武藝、和生命力三種屬性。這三種屬性的取值範圍都是大於等於0,小於等於100。當有兩名不同門派的**進入同乙個格仔時,一定會發生一次戰鬥,而且也只有在這種情況下,才會發生戰鬥。(同派**之間當然不會自相殘殺;乙個格仔裡三派**都有時,大家都會因為害怕別人漁翁得利而不敢出手;而多名同門派**也不會聯手對付敵人,因為這有悖於武林中崇尚的單打獨鬥精神,會被人恥笑)

一次戰鬥的結果將可能導致參戰雙方生命力發生變化,計算方法為:

戰後生命力 = 戰前生命力 - 對方攻擊力

而不同門派的**攻擊力計算方法不同:

少林派攻擊力 = (0.5 * 內力 + 0.5 * 武藝) * (戰前生命力 + 10) / 100

武當派攻擊力 = (0.8 * 內力 + 0.2 * 武藝) * (戰前生命力 + 10) / 100

峨嵋派攻擊力 = (0.2 * 內力 + 0.8 * 武藝) * (戰前生命力 + 10) / 100

對攻擊力的計算過程為浮點運算,最終結果去掉小數點後部分取整,使得攻擊力總是整數。一次戰鬥結束後,生命力變為小於或等於0 的**,被視為「戰死」,會從武林中消失。兩名不同門派的**相遇時,只發生一次戰鬥。初始狀態下,不存在生命值小於或等於0 的**,而且乙個格仔裡有可能同時有多個**。一系列戰鬥從初始狀態就可能爆發,全部戰鬥結束後,仍然活著的**才開始一齊走到下乙個格仔。總之,不停地戰鬥-行走-戰鬥-行走……所有**都需等戰鬥結束後,才一齊走到下乙個格仔。

你需要做的是,從乙個初始狀態,算出經過n 步(n < 1000)後的狀態。所有的**先進行完全部戰鬥(當然也可能沒有任何戰鬥發生),然後再一齊走到下乙個格仔,這稱為一步。

所有**總數不會超過1000。

C 之練習題5

5.有乙個由按鈕組成的矩陣,其中每 行有6個按鈕,共5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位 置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按鈕改變3盞燈的狀態 在矩陣邊上的按鈕改變4盞燈的狀態...

C 之練習題41

1.把 m 個同樣的蘋果放在n 個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k 表示 注意 5,1,1 和1,5,1 是同一種分法。輸入資料 第一行是測試資料的數目t 0 t 20 以下每行均包含兩個整數m 和n,以空格分開。1 m,n 10。輸出要求 對輸入的每組資料m 和n,...

C 之練習題42

1.在遙遠的國家佛羅布尼亞,嫌犯是否有罪,須由陪審團決定。陪審團是由法官從公眾中挑選的。先隨機挑選n 個人作為陪審團的候選人,然後再從這n 個人中選m 人組成陪審團。選m 人的辦法是 控方和辯方會根據對候選人的喜歡程度,給所有候選人打分,分值從0 到20。為了公平起見,法官選出陪審團的原則是 選出的...