前言
好的ladies and gentlemen,今天就让我们来测试一下chatgpt进行人类编程比赛效果如何,试题我就选择了蓝桥杯官网上的一些真题,当然AI给出的回答都带有一些提示,我的作用就是删除它,那么让我们赶快开始!
1、删除字符
题目描述
给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?
输入描述
输入的第一行包含一个单词,由大写英文字母组成。
第二行包含一个正整数 t。
其中,单词长度不超过 100,t 小于单词长度。
输出描述
输出一个单词,表示答案。
下面就是GPT4.0给出的回答和源码啦,可以看出它还是蛮智能的诶,编写了一个递归函数,而且代码格式也很规范,函数意思就是每次默认第一个是最小,然后查找后面的t个,有比他小的就把那个位置返回出去,然后减去已经出去的字符数,进入下一次递归,说实话一开始看确实有点复杂,通过debug的方式,我找到了原因,因为是字典序最小,并且不能改变字符位置,所以只要先把前面大的字符删掉,确保现在留下的是前t个里面最小的就可以了,不得不感叹,这…就是AI啊
OK 然后来个人类解法,巧用切片
s=input()
n=int(input())
for i in range(n)://删去n个for j in range(len(s)-1)://从第一个开始if ord(s[j])>ord(s[j+1])://比后面大就把它剪了s=s[0:j]+s[j+1:]break//下次循环else://如果前面就是按顺序的,就把尾巴剪了s=s[0:len(s)-1]//切片这东西,s[a:b]b会被剪掉
print(s)
OK,第一题GPT4不负众望
2、奇数倍数
请你找到最小的整数 X 同时满足:
X 是 2019 的整倍数;
X 的每一位数字都是奇数。
GPT4.0:
def all_digits_odd(number):digits = str(number)for digit in digits:if int(digit) % 2 == 0:return Falsereturn Truedef find_min_x():x = 2019while True:if all_digits_odd(x):return xx += 2019if __name__ == "__main__":min_x = find_min_x()print("满足条件的最小整数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
时间上主打一个碾压,GPT快了10倍,感觉现在不找工作 过两年就回家啃老吧
3、地雷
题目描述
在一个 n 行 m 列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数 n,m。
第 2 行到第 n+1 行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这一格有地雷。
其中,1≤n,m≤100 分钟后还是在当天。
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。
GPT4.0
def count_mines(grid, n, m, i, j):count = 0for 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 += 1return 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,然后读取方格图。接下来,程序使用count_mines函数计算每个空位置周围的地雷数量。最后,程序输出结果,对于没有地雷的方格,输出周围的地雷数量;对于有地雷的方格,输出9。
用时: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=0for 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+=1print(ans,end=" ")print()
84min…还是得用def,切记呀,如果有功能还是优先写函数,这是计算机科班第一反应!
4、纸张尺寸
问题描述
在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm × 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm × 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。
输入纸张的名称, 请输出纸张的大小。
输入格式
输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。
输出格式
输出两行,每行包含一个整数,依次表示长边和短边的长度。
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: 找规律,当然手算很稳
time: 2
GPT4.0
def paper_size(paper_name):a0_width = 1189a0_height = 841n = int(paper_name[1:])for _ in range(n):a0_width, a0_height = a0_height, a0_width // 2return a0_width, a0_heightdef main():paper_name = input().strip()width, height = paper_size(paper_name)print(width)print(height)if __name__ == "__main__":main()
solution: 程序首先定义了一个函数paper_size,它接收纸张的名称作为参数。main函数读取输入的纸张名称,然后调用paper_size函数获取纸张的长边和短边长度。最后,程序输出这两个长度。
time: 1min
结语
写了4道题,可以说,GPT4.0已经站在百分之五十的程序员身上向前走了,时不待我,别再过两年题还没读完,AI结果都输出了,这次的简单题型测试就到这里了,如果喜欢的人多的话,下次我们来测试中级题目GPT效果如何,我是Chowley,只争朝夕!