[chatgpt4.0 for coding][藍(lán)橋杯pythonB組]AI輔助刷題 考前18天

前言
好的ladies and gentlemen,今天就讓我們來(lái)測(cè)試一下chatgpt進(jìn)行人類編程比賽效果如何,試題我就選擇了藍(lán)橋杯官網(wǎng)上的一些真題,當(dāng)然AI給出的回答都帶有一些提示,我的作用就是刪除它,那么讓我們趕快開(kāi)始!
1、刪除字符
題目描述 給定一個(gè)單詞,請(qǐng)問(wèn)在單詞中刪除 t 個(gè)字母后,能得到的字典序最小的單詞是什么? 輸入描述 輸入的第一行包含一個(gè)單詞,由大寫英文字母組成。 第二行包含一個(gè)正整數(shù) t。 其中,單詞長(zhǎng)度不超過(guò) 100,t 小于單詞長(zhǎng)度。 輸出描述 輸出一個(gè)單詞,表示答案。
下面就是GPT4.0給出的回答和源碼啦,可以看出它還是蠻智能的誒,編寫了一個(gè)遞歸函數(shù),而且代碼格式也很規(guī)范,函數(shù)意思就是每次默認(rèn)第一個(gè)是最小,然后查找后面的t個(gè),有比他小的就把那個(gè)位置返回出去,然后減去已經(jīng)出去的字符數(shù),進(jìn)入下一次遞歸,說(shuō)實(shí)話一開(kāi)始看確實(shí)有點(diǎn)復(fù)雜,通過(guò)debug的方式,我找到了原因,因?yàn)槭亲值湫蜃钚?,并且不能改變字符位置,所以只要先把前面大的字符刪掉,確保現(xiàn)在留下的是前t個(gè)里面最小的就可以了,不得不感嘆,這..就是AI啊

OK 然后來(lái)個(gè)人類解法,巧用切片
s=input()
n=int(input())
for i in range(n)://刪去n個(gè)
? for j in range(len(s)-1)://從第一個(gè)開(kāi)始
? ? if ord(s[j])>ord(s[j+1])://比后面大就把它剪了
? ? ? s=s[0:j]+s[j+1:]
? ? ? break//下次循環(huán)
? else://如果前面就是按順序的,就把尾巴剪了
? ? s=s[0:len(s)-1]//切片這東西,s[a:b]b會(huì)被剪掉
print(s)
OK,第一題GPT4不負(fù)眾望
2、奇數(shù)倍數(shù)
請(qǐng)你找到最小的整數(shù) X 同時(shí)滿足: X 是 2019 的整倍數(shù); X 的每一位數(shù)字都是奇數(shù)。
GPT4.0:
def all_digits_odd(number):
? ? digits = str(number)
? ? for digit in digits:
? ? ? ? if int(digit) % 2 == 0:
? ? ? ? ? ? return False
? ? return True
def find_min_x():
? ? x = 2019
? ? while True:
? ? ? ? if all_digits_odd(x):
? ? ? ? ? ? return x
? ? ? ? x += 2019
if __name__ == "__main__":
? ? min_x = find_min_x()
? ? print("滿足條件的最小整數(shù)X為:", min_x)
人類男性:
for i in range(2019,99999999999,4038):
? if str(i).count('2') == str(i).count('4')== str(i).count('6')== str(i).count('8')== str(i).count('0') == 0:
? ? print(i)
? ? break
時(shí)間上主打一個(gè)碾壓,GPT快了10倍,感覺(jué)現(xiàn)在不找工作 過(guò)兩年就回家啃老吧
3、地雷
題目描述在一個(gè) n 行 m 列的方格圖上有一些位置有地雷,另外一些位置為空。
請(qǐng)為每個(gè)空位置標(biāo)一個(gè)整數(shù),表示周圍八個(gè)相鄰的方格中有多少個(gè)地雷。
輸入描述輸入的第一行包含兩個(gè)整數(shù) n,m。
第 2 行到第 n+1 行每行包含 m 個(gè)整數(shù),相鄰整數(shù)之間用一個(gè)空格分隔。如果對(duì)應(yīng)的整數(shù)為 0,表示這一格沒(méi)有地雷。如果對(duì)應(yīng)的整數(shù)為 1,表示這一格有地雷。
其中,1≤n,m≤100 分鐘后還是在當(dāng)天。
輸出描述輸出 n 行,每行 m 個(gè)整數(shù),相鄰整數(shù)之間用空格分隔。
對(duì)于沒(méi)有地雷的方格,輸出這格周圍的地雷數(shù)量。對(duì)于有地雷的方格,輸出 9。
GPT4.0
def count_mines(grid, n, m, i, j):
? ? count = 0
? ? for x in range(i - 1, i + 2):
? ? ? ? for y in range(j - 1, j + 2):
? ? ? ? ? ? if 0 <= x < n and 0 <= y < m and grid[x][y] == 1:
? ? ? ? ? ? ? ? count += 1
? ? return count
def main():
? ? n, m = map(int, input().split())
? ? grid = [list(map(int, input().split())) for _ in range(n)]
? ? for i in range(n):
? ? ? ? for j in range(m):
? ? ? ? ? ? if grid[i][j] == 1:
? ? ? ? ? ? ? ? print(9, end=" ")
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print(count_mines(grid, n, m, i, j), end=" ")
? ? ? ? print()
if __name__ == "__main__":
? ? main()
解釋?程序首先讀取輸入的n和m,然后讀取方格圖。接下來(lái),程序使用count_mines函數(shù)計(jì)算每個(gè)空位置周圍的地雷數(shù)量。最后,程序輸出結(jié)果,對(duì)于沒(méi)有地雷的方格,輸出周圍的地雷數(shù)量;對(duì)于有地雷的方格,輸出9。?
用時(shí):1min?
Human:
n,m=map(int,input().split())
matrix=[list(map(int,input().split())) for _ in range(n)]
for i in range(n):
? for j in range(m):
? ? if matrix[i][j]==1: print(9,end=" ")
? ? else:
? ? ? ans=0
? ? ? for x in range(i-1,i+2):
? ? ? ? for y in range(j-1,j+2):
? ? ? ? ? if 0<=x<n and 0<=y<m and matrix[x][y]==1:
? ? ? ? ? ? ans+=1
? ? ? print(ans,end=" ")
? print()
84min....還是得用def,切記呀,如果有功能還是優(yōu)先寫函數(shù),這是計(jì)算機(jī)科班第一反應(yīng)!
4、紙張尺寸
問(wèn)題描述在 ISO 國(guó)際標(biāo)準(zhǔn)中定義了 A0 紙張的大小為 1189mm × 841mm, 將 A0 紙 沿長(zhǎng)邊對(duì)折后為 A1 紙, 大小為 841mm × 594mm, 在對(duì)折的過(guò)程中長(zhǎng)度直接取 下整 (實(shí)際裁剪時(shí)可能有損耗)。將 A1 紙沿長(zhǎng)邊對(duì)折后為 A2 紙, 依此類推。
輸入紙張的名稱, 請(qǐng)輸出紙張的大小。
輸入格式輸入一行包含一個(gè)字符串表示紙張的名稱, 該名稱一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。
輸出格式輸出兩行,每行包含一個(gè)整數(shù),依次表示長(zhǎng)邊和短邊的長(zhǎng)度。
Human
l=1189
w=841
i=0
s=input()
n=int(s[-1])
for i in range(n):
? l,w=w,l//2
print(l)
print(w)
solution: 找規(guī)律,當(dāng)然手算很穩(wěn)
time: 2
GPT4.0
def paper_size(paper_name):
? ? a0_width = 1189
? ? a0_height = 841
? ? n = int(paper_name[1:])
? ? for _ in range(n):
? ? ? ? a0_width, a0_height = a0_height, a0_width // 2
? ? return a0_width, a0_height
def main():
? ? paper_name = input().strip()
? ? width, height = paper_size(paper_name)
? ? print(width)
? ? print(height)
if __name__ == "__main__":
? ? main()
solution: 程序首先定義了一個(gè)函數(shù)paper_size,它接收紙張的名稱作為參數(shù)。main函數(shù)讀取輸入的紙張名稱,然后調(diào)用paper_size函數(shù)獲取紙張的長(zhǎng)邊和短邊長(zhǎng)度。最后,程序輸出這兩個(gè)長(zhǎng)度。time: 1min
結(jié)語(yǔ)
寫了4道題,可以說(shuō),GPT4.0已經(jīng)站在百分之五十的程序員身上向前走了,時(shí)不待我,別再過(guò)兩年題還沒(méi)讀完,AI結(jié)果都輸出了,這次的簡(jiǎn)單題型測(cè)試就到這里了,如果喜歡的人多的話,下次我們來(lái)測(cè)試中級(jí)題目GPT效果如何,我是Chowley,只爭(zhēng)朝夕!