当前位置:首页|资讯|ChatGPT|编程

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

作者:Chowley发布时间:2023-03-21

前言

好的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,只争朝夕!


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1