華為筆試(黑色星期五與編碼問題)

2021-08-19 04:11:37 字數 1811 閱讀 2231

第一道題是字串編碼問題,就是輸入gbk格式的中文,和字母,擷取一定的字元,但是不能把中文截成兩半。

python預設的是utf-8的格式,在utf-8中中文和英文一樣處理,都是乙個字元的長度,

>>>s='中文1234編碼5678'

>>>s[:1]

'中文》s[2]

'1'>>>s[6:8]

'編碼'

解決方法:先用encode方法將字串轉換為bytes,encode的作用就是使我們看到的直觀的字元轉換成計算機內的位元組形式,這裡encode的引數encoding='gbk'表示編碼為gbk方案,errors='ignore'表示忽略錯誤。gbk編碼方案中每個中文字編碼為2個位元組,這樣就可以與排版顯示的寬度一致,擷取指定位置字串後再使用decode方法解碼為gbk格式。編碼方案也可以使用其他如utf-8、unicode等,但這樣每個中文字元編碼長度有可能與排版顯示長度不一樣,在格式化輸出時計算長度就有點複雜了:

>>> ss = s.encode(encoding='gbk',errors='ignore')

>>> print(ss)

b'\xd6\xd0\xce\xc41234\xb1\xe0\xc2\xeb5678'

>>> ss[:4].decode(encoding='gbk',errors='ignore')

'中文'

>>> ss[8:12].decode(encoding='gbk',errors='ignore')

'編碼'

第二個是黑色星期五。

import sys 

b= input().split()

n=int(b[0])

w=int(b[1])

if(len(b)>2 or len(b)<2):

print("-1")

exit()

if(n<0 or n>400):

print("-1")

exit()

if(w<0 or w>6):

print("-1")

exit()

def get(y,m):

if(y%4==0 and y%100!=0):

i=1

elif(y%400==0):

i=1else:

i=0

if(m==1 or m==3 or m==5 or m==7 or m==8 or m==10 or m==12):

return 31

elif m==2:

if(i==1):

return 29

else:

return 28

return 30

# 輸入n,限定範圍.注意轉化為int型別

a= [0 for i in range(7)]

week=6

for i in range(1900,1900+n):

for j in range(1,13):

a[week%7]+=1

week+=get(i,j)

#print(str(a[6])+" "+str(a[0]))

#for i in range(1,6):

print(str(a[w]))

核心思想就是先手動推斷出第乙個13號是週幾,算出是週六,week=6。然後算出這個月是多少天,加上,然後對7取餘。這個時候可以算出下個月13號是週幾,直到給定的日期,輸出周五的個數。

整體來說不難,但是我的通過率只有87%,不知道是那部分原因,是不是輸入的時候沒有判斷是不是字元?

黑色星期五

在西方,星期五和數字 13都代表著壞運氣,兩個不幸的個體最後結合成超級不幸的一天。所以,不管哪個月的十三日又恰逢星期五就叫 黑色星期五 要求 輸入年份,輸出是 判斷該年是否包含黑色星期五,如包含,給出具體日期 includeint main int b 13 閏年時 int n 0,i,year s...

黑色星期五

13號又是星期五是乙個不尋常的日子嗎?13號在星期五比在其他日少嗎?為了回答這個問題,寫乙個程式來計算在n年裡13日落在星期一,星期二.星期日的次數.這個測試從1900年1月1日到1900 n 1年12月31日.n是乙個非負數且不大於400.這裡有一些你要知道的 1900年1月1日是星期一.4,6,...

黑色星期五

水題 問題描述 有些西方人比較迷信,如果某個月的13號正好是星期五,他們就會覺得不太吉利,用古人的說法,就是 諸事不宜 請你編寫乙個程式,統計出在某個特定的年份中,出現了多少次既是13號又是星期五的情形,以幫助你的迷信朋友解決難題。說明 1 一年有365天,閏年有366天,所謂閏年,即能被4整除且不...