[chatgpt4.0 for coding][蓝桥杯pythonB组]AI辅助刷题 考前18天

前言

好的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 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("满足条件的最小整数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 = 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,然后读取方格图。接下来,程序使用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=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,切记呀,如果有功能还是优先写函数,这是计算机科班第一反应!

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 = 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: 程序首先定义了一个函数paper_size,它接收纸张的名称作为参数。main函数读取输入的纸张名称,然后调用paper_size函数获取纸张的长边和短边长度。最后,程序输出这两个长度。
time: 1min

结语

写了4道题,可以说,GPT4.0已经站在百分之五十的程序员身上向前走了,时不待我,别再过两年题还没读完,AI结果都输出了,这次的简单题型测试就到这里了,如果喜欢的人多的话,下次我们来测试中级题目GPT效果如何,我是Chowley,只争朝夕!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoupV7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值