復旦20考研機試真題 A 鬥牛

2021-10-06 14:45:46 字數 1717 閱讀 2176

給定5個 0~9 範圍內的整數 a1, a2, a3, a4, a5。如果能從五個整數中選出三個並且這三個整數的和為 10 的倍數(包括 0),那麼這五個整數的權值即為剩下兩個沒被選出來的整數的和對 10 取餘的結果,顯然如果有多個三元組滿⾜和是 10 的倍數,剩下兩個數之和對 10 取餘的結果都是相同的;如果 選不出這樣三個整數,則這五個整數的權值為 -1。 現在給定 t 組資料,每組資料報含五個 0~9 範圍內的整數,分別求這 t 組資料中五個整數的權值。

【輸⼊格式】 第⼀⾏⼀個整數 t (1<=t<=1000),表⽰資料組數。 接下來 t ⾏,每⾏ 5 個 0~9 的整數,表⽰⼀組資料。

【輸出格式】 輸出 t ⾏,每⾏⼀個整數,表⽰每組資料中五個整數的權值。

【樣例輸⼊】

4

1 0 0 1 0

1 0 0 8 6

3 4 5 6 7

4 5 6 7 8

【樣例輸出】

2

-1-1

0

【解釋】 在第⼀組(1 0 0 1 0)中,三元組 0 0 0 的和為 0,是 10 的倍數,剩餘的 1 1 之和為 2,對 10 取余為 2。在第⼆組中,不存在任何⼀個三元祖只和為 10 的倍數。 在第四組中,三元組 5 7 8 的和為 20,是 10 的倍數,剩餘的 4 6 只和為 10,對 10取余為 0。 在第五組中,三元組 0 3 7 和三元組 0 4 6 的和都是 10,是 10 的倍數,但是根據簡單的數論可知,如 果存在多個三元組滿⾜情況,那麼剩餘數字的結果之和對 10 取余是相等的,在本例中和為 10,對 10 取余為 0。

【時空限制】 2500ms,256mb

這道題目,我ac了,但是**邏輯寫的還是有些繁瑣;下面我先給出考場上的**,再給出我修改過的**;

考場**:

#include

intcal

(int a,

int i,

int j,

int k)

return

(a[b[0]

]+ a[b[1]

])%10

;}intmain()

}}}}

ret ==-1

?printf

("-1\n"):

printf

("%d\n"

, ret);}

return0;

}

這個一段簡單的處理,我竟然用了三重for迴圈,之後接了兩個if語句,最後還定義了乙個cal()函式去處理結果。

在考場上的話,時間有限,我推薦同學們能想到正確的思路,就及時完成吧,畢竟過測試點拿分最重要,也沒人看**。

說一下改進的思路,其實我們並不需要知道到底是那三個數字能被10整除,我們只要知道三個數的和是不是可以被10整除。這樣子的話,逆向思維一下,其實我們挑選兩個不同的數出來,看剩下的三位數是不是可以被整除,這樣乙個簡單的思路轉變,**可以簡潔不少。

update1.0

#include

intmain()

for(

int i =

0; i <

4; i++)}

ret ==-1

?printf

("-1\n"):

printf

("%d\n"

, ret);}

return0;

}

復旦18年考研機試真題(1) 求眾數

題目 求眾數。眾數就是乙個序列 現次數最多的數字。如果不唯一,則輸出小的那個值。輸入的第一行為正整數n,代表有n個數字,1 n 105 第二行為n個數字,每個數字在 int 範圍內。要求輸出眾數。輸入 第乙個代表有幾個數字 8 10 3 8 8 3 2 2 2輸出 2分析 用map來儲存數字對應的次...

復旦13考研機試真題 1 字串匹配

對於主串m和模式串p,找到p在m 現的所有子串的第乙個字元在p中的位置。p中第乙個字元所在的位置為0。首行的數字表示有多少組字串。字元長度在106以內。輸入及示例 2 ababababa ababa aaaaa 輸出及示例 0 2 4 0 1 相鄰位置之間用乙個空格隔開 分析 這個題目我在牛客網上見...

考研機試真題 還是A B 浙江大學

關鍵字 判斷兩個數的最後k位是否相同 用求餘判斷是否相同 題目描述 讀入兩個小於10000的正整數a和b,計算a b。需要注意的是 如果a和b的末尾k 不超過8 位數字相同,請直接輸出 1。輸入描述 測試輸入包含若干測試用例,每個測試用例佔一行,格式為 a b k 相鄰兩數字有乙個空格間隔。當a和b...