本次10道题目偏基础,多想一会尝试独立完成。即使自己的方法很麻烦,不要放弃独立思考,想出来还是很有成就感的。

L1-021 重要的话说三遍(签到题)

题目

这道超级简单的题目没有任何输入。

你只需要把这句很重要的话 —— “I’m gonna WIN!”——连续输出三遍就可以了。

注意每遍占一行,除了每行的回车不能有任何多余字符。

输入样例

输出样例

I'm gonna WIN!
I'm gonna WIN!
I'm gonna WIN!

思路

代码

print("I'm gonna WIN!")
print("I'm gonna WIN!")
print("I'm gonna WIN!")

L1-022 奇偶分家(签到题)

题目

给定N个正整数,请统计奇数和偶数各有多少个?

输入格式

输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。

输出格式

在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。

输入样例

9
88 74 101 26 15 0 34 22 77

输出样例

3 6

思路

代码

n  = int(input())
s = map(int, input().split())
odd_num  = 0
even_num = 0
for s_i in s:
    if s_i %2==0:
        even_num+=1
    else:
        odd_num+=1
print(odd_num,even_num)

L1-023 输出GPLT(模拟题)

题目

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

输入格式

输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

输出格式

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

输出样例

GPLTGPLTGLTGLGLL

思路

1.找到需要的GPLT,然后按顺序输出就可以。

2.暴力法就是记住四种字符的个数,然后输出的时候再一个个输出。结果就是会出现8个if判断,就是比较冗余。

3.简洁法就是建立一个字典count和一个列表order,有点秒

代码(暴力法)

s = input()
GPLT ={'g','p','l','t','G','P','L','T'}
cnt_g,cnt_p,cnt_l,cnt_t=0,0,0,0
for s_i in s:
    if s_i in GPLT:
       ##注意大小写
       s_i_u =s_i.upper()
       ##计算各种数量
       if s_i_u == 'G':cnt_g+=1
       if s_i_u == 'P':cnt_p+=1
       if s_i_u == 'L':cnt_l+=1
       if s_i_u == 'T':cnt_t+=1
       
res = []
##这个while可以保证全部遍历
while cnt_g>0 or cnt_p>0 or cnt_l>0 or cnt_t>0:
    ##按顺序判断是否还有该字符
    if cnt_g>0:
        res.append('G')
        cnt_g-=1
    if cnt_p>0:
        res.append('P')
        cnt_p-=1
    if cnt_l>0:
        res.append('L')
        cnt_l-=1
    if cnt_t>0:
        res.append('T')
        cnt_t-=1   
      
print(''.join(res))

代码(简洁法)

s  = input()
count = {'G':0,'P':0,'L':0,'T':0}
##找到四种字符并存储个数
for char in s:
    upper_char = char.upper()
    if upper_char in count:
        count[upper_char]+=1

order = ['G','P','L','T']
result = []
##这个any(count.values())比较少见,记一下。
while any(count.values()):
       ##建立列表然后遍历也不容易想到!
       for char in order:
           if count[char]>0:
              result.append(char)
              count[char]-=1
print(''.join(result))

L1-024 后天(签到题)

题目

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

输入格式

输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。

输出格式

在一行中输出D天的后天是星期几。

输入样例

3

输出样例

5

思路

代码

day = int(input())
result = (day+2)%7
##取余之后只有0到6,这个0应该是周天,所以特殊处理一下
print(result if result else 7)

L1-025 正整数A+B(易错题)

题目

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?

思路

  1. 注意代码的简洁性,用函数。
  2. 有多个测试点,所以注意3个易错,在代码注释里。

代码

##出现2次,所以用函数
def is_valid(num_str):
     ##检查是否是正整数!!
    if num_str.isdigit():
       num = int(num_str)
       if 1<=num<=1000:
          return True
    return False    
## 【易错1】以第一个空格分割,因为可以有多个空格
data = input().split(' ',1)
a_str = data[0]
b_str = data[1].strip()##后面两个易错,所以这里就去除前导/后导空格

a_valid = is_valid(a_str)
b_valid = is_valid(b_str)## 【易错2】去除b_str的前导/后导空格

##列表表达式简洁
a_out = a_str if a_valid else '?'
b_out = b_str if b_valid else '?'

##输出
if a_valid and b_valid:
   result = int(a_str)+int(b_str)## 【易错3】去除b_str的前导/后导空格,不然计算出错
   print(f'{a_out} + {b_out} = {result}')
else:
   print(f'{a_out} + {b_out} = ?')

L1-026 I Love GPLT(签到题)

题目

这道超级简单的题目没有任何输入。

你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。

所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。

输入样例

输出样例

I
 
L
o
v
e
 
G
P
L
T

注意:输出的两个空行中各有一个空格。

思路

代码

s = 'I Love GPLT'
for char in s:
    print(char)

L1-027 出租(模拟题)

题目

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1index[1]=0 对应 arr[0]=8index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式

输入在一行中给出一个由11位数字组成的手机号码。

输出格式

为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

输入样例

18013820100

输出样例

int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

思路

  1. 思路就是将号码tel去重,再降序排列得到arr。逐个tel找到在arr的下标,得到index。可以看看暴力法的注解,应该能看懂
  2. 简洁法就是用了sorted函数降序排序,然后建立了一个映射表。
  3. 如果记得sorted肯定比手搓冒泡快,简洁法就是要多记。暴力也还好,考试拿分最重要。

代码(暴力法)

##暴力思路:将号码tel去重,再降序排列得到arr。逐个tel找到在arr的下标,得到index。
tel = input().strip()
##去重并转换为列表
list_tel  = list(set(tel))
n  = len(list_tel)
##手动冒泡排序实现降序排列
for i in range(n):
    for j in range(n-i-1):
        if int(list_tel[j])<int(list_tel[j+1]):
            list_tel[j],list_tel[j+1] = list_tel[j+1],list_tel[j]
            
##找下标
list_index = []
##外层循环针对每一个元素
for char in tel:
    ##每一个元素在list遍历寻找下标
    for i in range(n):
        if list_tel[i]==char:list_index.append(str(i))
##这时list_tel和list_index都是字符列表。按格式输出结果
arr = ','.join(list_tel)
index = ','.join(list_index)

##注意这里是三个{}
result_arr = f"int[] arr = new int[]{{{arr}}};"
result_index = f"int[] index = new int[]{{{index}}};"

##输出
print(result_arr)
print(result_index)


代码(简洁法)

tel = input().strip()

# 1. 去重并降序排序(简化排序逻辑)
# 利用 set 去重后转为列表,再通过sorted函数按数字降序排列
list_tel = sorted(set(tel), key=lambda x: int(x), reverse=True)

# 2. 查找每个字符的索引(简化嵌套循环)
# 用列表推导式 +  enumerate 构建映射表,再快速查询
index_map = {char: str(i) for i, char in enumerate(list_tel)}
list_index = [index_map[char] for char in tel]

# 3. 生成结果
arr = ','.join(list_tel)
index = ','.join(list_index)

# 4. 输出 Java 数组格式
result_arr = f"int[] arr = new int[]{{{arr}}};"
result_index = f"int[] index = new int[]{{{index}}};"

print(result_arr)
print(result_index)

L1-028 判断素数(语法题)

题目

本题的目标很简单,就是判断一个给定的正整数是否素数。

输入格式

输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。

输出格式

对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No

输入样例

2
11
111

输出样例

Yes
No

思路

  1. 超时是因为没有用三种简化计算量,记一下就好。

代码

##判断素数,除2和本身以外无其余公因子。
##用sqrt,不算偶数,步长为2三种方法都可以减少计算量
import math
def PrimeNum(num):
    if num==2:return True
    if num<=1 or num%2==0:return False
    for i in range(3,int(math.sqrt(num))+1,2):
        if num%i==0:return False
    return True    
n = int(input())
for _ in range(n):
    num = int(input())
    print('Yes' if PrimeNum(num) else 'No')

L1-029 是不是太胖了(语法题)

题目

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)

输入格式

输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。

输出格式

在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。

输入样例

169

输出样例

124.2

思路

代码

H = int(input())
weight = (H-100)*0.9*2
##考点在于f'{weight:.1f}'weight是变量,1f是一位小数
print(f'{weight:.1f}')

L1-030 一帮一(模拟题)

题目

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式

输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式

每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例

Amy Jack
Tom Linda
Bill Maya
Cindy John

思路

1.用到了二维数组students [] [] ,总体来说就是一个向前遍历,一个向后遍历。引入visited的目的就是防止遗漏。

代码

n = int(input())
students=[]
##存储信息
for _ in range(n):
    gender,name =input().split()
    students.append((int(gender),name))

visited = [False]*n
##外循环找前一半就行
for i in range(n//2):
    ##内循环每次都从最后一个遍历,防止遗漏,但是注意要不能重复
    for j in range(n-1,-1,-1):
        ##性别不同时输出
        if students[i][0]!=students[j][0] and not visited[j]:
            print(f"{students[i][1]} {students[j][1]}")
            ##标记这个已经被找过了。每次都是确定最前面的一定被找到,只用标记后面的
            visited[j]=True
            ##内循环可以结束了
            break

小结

1.10道题目顺序安排合理,容易和难的穿插着来。

2.总体来看就是模拟题居多,暂时可以不用数据结构的知识也能解决。

3.很多题目都可以有多解,暴力法是我自己写的,简洁法是问ai的。平时得多学习他人的经验。如果是考试,只要做对就行。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐