## 資訊小考題目整理 1. k299 最後倒數 題目概略:給一數字n,代表接下來有幾個數字,及一個有n個數的數組,最後將原本的數組倒過來輸出 ```python= arr=list(map(int,input().split())) #輸入數組 index=len(arr)-1 #求出數組最後一個數字的索引值 new=[] #創建一個新數組,代表反轉後的數組 while(index>0): #執行此迴圈直到數組的第二個數(第一個數字是n) new.append(arr[index]) #從數組最後一個數推入新數組中 index-=1 #每次往前進一個數,索引值減1 print(*new) ###輸出反轉後的數組,但須去掉[],故加上* ``` 2. k315 所有位數和 題目概略:給一數字n,求這個數字所有位數和 ```python= n=int(input()) #輸入數字n sum=0 #將一開始的位數和設為0 while(n>0): #若數字大於0,執行此迴圈 sum+=n%10 #將n取10的餘數,也就是最後一個位數,並加到sum中 n=n//10 #將n整除10,去掉最後一個位數 print(sum) #輸出位數和 ``` 3. k316 倒數計時 題目概略:輸入一數字n,並從這個數字開始倒數到0為止 ```python= n=int(input()) #輸入數字n for i in range(n,-1,-1): #由n開始倒數到0,每次遞減1 print(i,end=' ') #輸出i,並以空白隔開 ``` 4. i632 購物折扣 題目概略:輸入一個金額,若大於等於20000打9折,大於等於10000打95折,其餘打98折,若最後金額有小數則無條件捨去 ```python= import math #引入math函式庫 n=int(input()) #輸入金額 if n>=20000: #若金額大於等於20000,執行這個敘述 n=n*0.9 #將金額打9折 elif n>=10000: #若金額大於等於10000,執行這個敘述 n=n*0.95 #將金額打95折 else: #若都不符合以上敘述,執行這個敘述 n=n*0.98 #將金額打98折 print(math.floor(n)) #將金額無條件捨去後輸出 ``` 5. h910 成績等第判斷 題目概略:輸入一個成績,若大於等於80分輸出A,大於等於70分輸出B,大於等於60分則輸出C,低於60分輸出F ```python= n=int(input()) #輸入一個數字 if n>=80: #若大於等於80,執行此敘述 print("A") elif n>=70: #若大於等於70,執行此敘述 print("B") elif n>=60: #若大於等於60,執行此敘述 print("C") else: #其餘情況則執行此敘述 print("F") ``` 6. k374 資料分組 題目概略:給定一個n,代表接下來的數組有幾個數字,接著有n個數。最後有一個數m,輸出比m大的數字數量及比m小的數字數量 ```python= arr=list(map(int,input().split())) #輸入一個數組 index=len(arr)-1 #求數組最後一個數的索引值(這個數就是m) m=arr[index] #將數組的最後一個數指定給m index-=1 #將索引值減1,因為數組中從倒數第二個數才需要比較 big=0 #將比m大的數設為0 small=0 #將比m小的數設為0 while(index>0): #執行此迴圈直到數組的第二個數(第一個數字是n) a=arr[index] #將數組中的數字逐一指定到a,並進行比較 if a>m: #若比m大執行此敘述 big+=1 if a<m: #若比m小執行此敘述 small+=1 index-=1 #將索引值減1 print(big,small,sep=" ") #輸出比m大及比m小的數字數量,以空格隔開 ``` 7. k431 團購力量大 題目概略:蛋糕一個100元,買十送一,今天要買n個蛋糕,輸出需要多少錢 ```python= n=int(input()) #輸入要買幾個蛋糕 sum=0 #將總金額設為0 while(n>=11): #如果蛋糕數量大於11個,執行此判斷 sum+=1000 #因為蛋糕買10送1,所以每11個蛋糕總金額多1000元 n-=11 #把要購買的蛋糕數量減11 sum+=100*n #剩餘不足11個蛋糕每1個100元 print(sum) #輸出總金額 ``` 8. k432 大小關係 題目概略:輸入兩個數a,b,比較他們的大小 ```python= a,b=map(int,input().split()) #輸入兩個數字a,b if a>b: #如果a>b執行此敘述 print(a,b,sep=">") elif a<b: #如果a<b執行此敘述 print(a,b,sep="<") else: #如果a=b執行此敘述 print(a,b,sep="=") ``` 9. k433 Tea Time 題目概略:給定一個時間,判斷是否為下午茶時間 (下午茶時間:14:10~16:10) ```python= a,b=map(int,input().split()) #輸入時間,代表a時b分 x=0 #一開始先設定不是下午茶時間 if a==14 and b>=10: #如果是14時且是10分以後,改設為下午茶時間 x=1 elif a==15: #如果是15時,改設為下午茶時間 x=1 elif a==16 and b<=10: #如果是16時且是10分以前,改設為下午茶時間 x=1 if x==1: #如果是下午茶時間輸出YES print("YES") else: #否則輸出NO print("NO") ``` 10. k434 抽獎卷(一) 題目概略:抽獎卷上有兩個數字,如果第二個數字是3、5、8得200,第一個數字是奇數得100,兩個數字相等得50,如果重複中獎金額以最高者計算,輸出中了多少錢 ```python= a,b=map(int,input().split()) #輸入抽獎卷上的兩個號碼 sum=0 #將中獎金額設為0 if a==b: #如果兩數相等將中獎金額設為50 sum=50 if a%2==1: #如果第一個數為奇數將中獎金額設為100 sum=100 if b==3 or b==5 or b==8: #如果第二個數為3、5、8將中獎金額設為200 sum=200 #採用這個順序進行判斷是因為50<100<200,若按照題目的順序判斷中獎金額可能會改變 print(sum) #輸出金額 ``` 11. k435 抽獎卷(二) 題目概略:抽獎卷上有兩個數字,如果第二個數字是3、5、8贏200,第一個數字是奇數贏100,兩個數字相等贏50,如果重複中獎金額可累加,輸出中了多少錢 ```python= a,b=map(int,input().split()) #輸入抽獎卷上的兩個號碼 sum=0 #將中獎金額設為0 if a==b: #如果兩數相等將中獎金額加50 sum+=50 if a%2==1: #如果第一個數為奇數將中獎金額加100 sum+=100 if b==3 or b==5 or b==8: #如果第二個數為3、5、8將中獎金額加200 sum+=200 #採用這個順序進行判斷是因為50<100<200,若按照題目的順序判斷中獎金額可能會改變 print(sum) #輸出金額 ``` 12. k436 偶數 題目概略:給一個數n,若為偶數則一直除以2,直到變成奇數為止,並輸出這個數 ```python= n=int(input()) #輸入一個數n while(n%2==0): #若為偶數則繼續除以2 n//=2 print(n) #輸出最後結果 ``` 13. k437 細菌 題目概略:有一種細菌每次分裂數量會變為原來的4倍,現給定兩數n、m,代表有多少個細菌及目標細菌數量,輸出需要分裂幾次才會大於等於目標細菌數量 ```python= n,m=map(int,input().split()) #輸入n,m a=0 #將分裂次數設為0 while(n<m): #如果細菌數小於目標細菌數則繼續執行迴圈 a+=1 #分裂次數加1 n*=4 #細菌數量變為原來的4倍 print(a) #輸出分裂次數 ``` 14. k472 打蚊比賽 題目概略:現有4組人比賽打蚊子,每一組人數不同,給定他們打蚊子的數量,輸出是第幾組打最多蚊子及打到蚊子的數量 ```python= group=0 #將答案設為第0組 new=[] #建立一個新數組,代表每一組打蚊子的數量 for i in range(4): #因為有4組,執行此迴圈4次 arr=list(map(int,input().split())) #輸入每一個人打蚊子的數量 x=sum(arr) #將每一個人打蚊子的數量加總 new.append(x) #將打到的蚊子總數存到new陣列中 max=0 #將答案設為0隻 for i in range (4): #因為有4組,執行此迴圈4次 if new[i]>max: #如果這個組別打的蚊子數量大於原本的最大值,執行此敘述 max=new[i] #將最大值重設 group=i+1 #將組別改為這一組,因為陣列i從0開始,需加1 print(group,max,sep=" ") #輸出答案,中間以空格隔開 ``` 15. k473 尋找HAPPY 題目概略:有3組陣列,每個陣列有多個字串,請在這些字串中找到"HAPPY",若有則輸出是位於第幾組陣列的第幾個字串,若無則輸出"NO" ```python= flag=0 #假設找不到"HAPPY" n=0 #設定在第0組陣列 m=0 #設定索引值為0 for i in range(3): #由於有3組陣列,故跑3次 arr=input().split() #輸入陣列 if "HAPPY" in arr: #搜尋是否有"HAPPY" n=i+1 #若有,則將答案設為i+1(因為index從0開始) m=arr.index("HAPPY")+1 #若有,則將答案設為index+1(因為index從0開始) flag=1 #找到"HAPPY",設為1 if flag==1: #若有找到"HAPPY"則輸出n,m print(n,m,sep=' ') else: #若沒有找到"HAPPY"則輸出"NO" print("NO") ``` 16. k474 促銷果凍 題目概略:今天你買了n個果凍,已知每3個空果凍盒可以換1個果凍,請問你可以吃到多少果凍 ```python= n=int(input()) #輸入買了n個果凍 sum=n #將吃到的果凍的總數一開始設為購買的數量 while n>=3: #若空果凍盒數量大於等於3盒可以一直換 sum+=n//3 #將吃到的果凍數量加上空果凍盒整除3的數量,代表多吃到的果凍 n=n//3+n%3 ''' 將原本空果凍盒數量再整除3,代表現在的空果凍盒的數量, 若空果凍盒非3的倍數,會有空的果凍盒沒被拿去換果凍,須加上之前沒換到的 ''' print(sum) #輸出能吃到的果凍總數 ``` 17. k545 促銷冰棒 題目概略:今天你買了n枝冰棒,已知每6枝冰棒棍可以換1枝冰棒,請問你可以吃到多少冰棒 ```python= n=int(input()) #輸入買了n枝冰棒 sum=n #將吃到的冰棒的總數一開始設為購買的數量 while n>=6: #若冰棒棍數量大於等於6枝可以一直換 n-=5 #因為6枝冰棒棍可以換一枝冰棒,實際消耗5枝冰棒棍 sum+=1 #每消耗6枝冰棒棍換一枝冰棒 print(sum) #輸出能吃到的冰棒總數 ``` 18. k546 次方 十位數 題目概略:求17的n次方的十位數字 ```python= n=int(input()) #輸入n sum=1 #17的0次為1 while (n>0): #若n大於0則sum一直乘以17 sum=sum*17 n-=1 #每乘一次17,n減1 sum=sum%100 #利用取餘數,取sum的後兩位數字 sum=sum//10 #再利用整除10求十位數字 print(sum) #輸出十位數 ``` 19. k547 次方 百位數 題目概略:求18的n次方的百位數字 ```python= n=int(input()) #輸入n if n==0 or n==1: #因為18的0次跟1次沒有百位數,故百位數為0 c=str(0) else: #其餘數字先求18的n次,再把數字轉為字串,求倒數第三個字元即為百位數 sum=str(18**n) c=sum[-3] print(c) #輸出百位數 ``` 20. h913 可以被6整除的和 題目概略:一個數字n,代表接下來有n個數,求這n個數被6整除的和 ```python= n=int(input()) #輸入n sum=0 #將總和設為0 arr=input() arr=[int(x) for x in arr.split()] #輸入陣列 index=len(arr)-1 #求陣列最後一個值的索引 while index>=0: #若索引值大於等於0繼續判斷 if arr[index]%6==0: #若這個數可以被6整除則相加 sum+=arr[index] index-=1 #每次做完index減1 print(sum) #輸出結果 ``` 21. i649 總和計算 題目概略:一開始有一個數字n,代表接下來有幾個a,b,請求出在a,b之間可以被3或4整除,但無法被5整除的數之和 ```python= n=int(input()) #輸入n for i in range(n): #要做n次 sum=0 #先將總和設為0 a,b=map(int,input().split()) #輸入a,b for i in range(a,b+1,1): #代表從a開始判斷,到b結束 if (i%3==0 or i%4==0) and i%5!=0: #如果可以被3或4整除,但無法被5整除,就相加 sum+=i print(sum) #輸出總和 ``` 22. h915 輸出最大值 題目概略:有一個數n,接下來有n組a,b,請輸出兩者的最大值 ```python= n=int(input()) #輸入n for i in range(n): #要做n次 a,b=map(int,input().split()) #輸入a,b Max=max(a,b) #求兩數最大值 print(Max) #輸出MAX ```