第三届全国高校绿色计算系列大赛-任务挑战组预赛试题讲解

第一阶段

1、第一关:图片数据查询

SELECT * FROM((SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 3) union
(SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 19, 3)
union
(SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 43, 3))temp order by title desc;

思路:(1)找到时间和日期的转换函数转换时间和日期,(2)按照时间和日期倒序排序所有记录,(3)找到25号、24号、23号的最后三本书的记录,并输出;(4)将三条记录关联并按所给样式排序;(5)在column1列的数据之前加入空格。(真坑,在输出这里还搞个格式问题,其实也是考察怎怎么用SQL语法在字符串中的应用)

第二阶段

1、 第一关:特定 x86 宏相关代码识别

# -*- coding: utf-8 -*-
"""
@Date : 2020/8/29 13:30
@Author : LGD
@File :test02.py
@IDE :PyCharm
"""
import fileinput

# 根据题目要求将能在×86平台运行的语句放入列表中存储
ops1 = ['#if defined(__x86_64__)', '#ifdef __x86_64__', '#elif defined(__x86_64__)', '#else']
ops2 = ['#endif']


def count_X86_code(filename):
    lst = list()
    # 读取输入文件的内容,并将每一行的内容去掉换行符和空格存储到列表中,最后列表中存的是一个个语句
    for line in fileinput.input(filename):
        text = line.replace('\n', '').replace('\r', '').strip()
        lst.append(text)

    out = list()
    i = 0

    for line in lst:  # 逐语句遍历
        i = i + 1  # 记录文件中每行每行内容的行数
        # 读取存储到文件中的内容是否有能在×86平台运行的语句
        if line in ops1:
            # 找到开始语句
            str1 = '起始行为' + str(i + 1)  # 记录起始行
            temp = lst[i:]
            for text in temp:
                if text in ops2:
                    # 找到结束语句
                    str2 = '结束行为' + str(i + temp.index(text))  # 记录结束行
                    st = str1 + ',' + str2 + '。'  # 为输出格式所做
                    out.append(st)  # 保存找到多条记录
                    break  # 找到一个记录跳出小循环

        continue  # 寻找下一条记录

    # 输出记录
    if len(out) == 0:
        print('NULL')
    else:
        for i in out:
            print(i)


if __name__ == '__main__':
    file_name = input()  # 输入要判断的文件
    count_X86_code(file_name)

思路:(1)读文件,获取文件中每一行语句并存储;(2)将每一行的语句与能在×86平台运行的宏对比找到起始行,并记录行号;(3)找到结束行,并记录行号,并得到第一条结果;(4)进行后面的比较直到比较完文件中每一行语句找到所有结果。

2、第二关:所有 x86 宏相关代码识别

# -*- coding: utf-8 -*-
"""
@Date : 2020/8/29 10:12
@Author : LGD
@File :test01.py
@IDE :PyCharm
"""
import fileinput
# 与题一类似,只是要比较的语句变多, 因此不再累述。
ops1 = ['#if defined(__x86_64__)', '#ifdef __x86_64__', '#elif defined(__x86_64__)', '#else',
        '#if defined(__ATOMIC_HLE_ACQUIRE)', '#ifdef _ATOMIC_HLE_ACQUIRE', '#elif defined(_ATOMIC_HLE_ACQUIRE)',
        '#if defined(__ATOMIC_HLE_RELEASE)', '#ifdef __ATOMIC_HLE_RELEASE', '#elif defined(__ATOMIC_HLE_RELEASE)',
        '#if defined(__DECIMAL_BID_FORMAT__)', '#ifdef __DECIMAL_BID_FORMAT__', '#elif defined(__DECIMAL_BID_FORMAT__)',
        '#if defined(__FXSR__)', '#ifdef __FXSR__', '#elif defined(__FXSR__)',
        '#if defined(__GCC_ASM_FLAG_OUTPUTS__)', '#ifdef __GCC_ASM_FLAG_OUTPUTS__', '#elif defined(__GCC_ASM_FLAG_OUTPUTS__)',
        '#if defined(__MMX__)', '#ifdef __MMX__', '#elif defined(__MMX__)',
        '#if defined(__SEG_FS)', '#ifdef __SEG_FS', '#elif defined(__SEG_FS)',
        '#if defined(__SEG_GS)', '#ifdef __SEG_GS', '#elif defined(__SEG_GS)',
        '#if defined(__SIZEOF_FLOAT128__)', '#ifdef __SIZEOF_FLOAT128__', '#elif defined(__SIZEOF_FLOAT128__)',
        '#if defined(__SIZEOF_FLOAT80__)', '#ifdef __SIZEOF_FLOAT80__', '#elif defined(__SIZEOF_FLOAT80__)',
        '#if defined(__SSE2_MATH__)', '#ifdef __SSE2_MATH__', '#elif defined(__SSE2_MATH__)',
        '#if defined(__SSE2__)', '#ifdef __SSE2__', '#elif defined(__SSE2__)',
        '#if defined(__SSE_MATH__)', '#ifdef __SSE_MATH__', '#elif defined(__SSE_MATH__)',
        '#if defined(__SSE__)', '#ifdef __SSE__', '#elif defined(__SSE__)',
        '#if defined(__amd64)', '#ifdef __amd64', '#elif defined(__amd64)',
        '#if defined(__amd64__)', '#ifdef __amd64__', '#elif defined(__amd64__)',
        '#if defined(__code_model_small__)', '#ifdef __code_model_small__', '#elif defined(__code_model_small__)',
        '#if defined(__k8)', '#ifdef __k8', '#elif defined(__k8)',
        '#if defined(__k8__)', '#ifdef __k8__', '#elif defined(__k8__)',
        '#if defined(__x86_64)', '#ifdef __x86_64', '#elif defined(__x86_64)',
        '#if defined(i386)', '#ifdef i386', '#elif defined(i386)',
        '#if defined(__i386__)', '#ifdef __i386__', '#elif defined(__i386__)',
        '#if defined(__X86__)', '#ifdef __X86__', '#elif defined(__X86__)',
        '#if defined(_X86_)', '#ifdef _X86_', '#elif defined(_X86_)', ]
ops2 = ['#endif']


def count_X86_code(filename):
    lst = list()
    for line in fileinput.input(filename):
        text = line.replace('\n', '').replace('\r', '').strip()
        lst.append(text)

    out = list()
    i = 0

    for line in lst:
        i = i + 1
        if line in ops1:
            str1 = '起始行为' + str(i + 1)
            temp = lst[i:]
            for text in temp:
                if text in ops2:
                    str2 = '结束行为' + str(i + temp.index(text))
                    st = str1 + ',' + str2 + '。'
                    out.append(st)
                    break

        continue

    if len(out) == 0:
        print('NULL')
    else:
        for i in out:
            print(i)


if __name__ == '__main__':
    file_name = input()
    count_X86_code(file_name)

思路与第一关一样只是比较的宏多一点。

总结

总体来说,题目都还是考的很基础,第一阶段是考察SQL语句的编写,第二阶段是考察通过程序对文件进行读取;考察的大多数都是语法问题,还有比较易思考的逻辑。如果对基础知识和语法掌握比较好的话,应该很快能完成。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hong_Youth

您的鼓励将是我创作的动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值