OD机试题练习(二)

文章目录

      • [1. 合并表记录](#1. 合并表记录)
      • [2. 提取不重复的整数](#2. 提取不重复的整数)
      • [3. 字符个数统计](#3. 字符个数统计)
      • [4. 数字颠倒](#4. 数字颠倒)
      • [5. 字符串反转](#5. 字符串反转)
      • 6.句子逆序
      • 7.字符串排序
      • [8. 求int型正整数在内存中存储时1的个数](#8. 求int型正整数在内存中存储时1的个数)
      • 9.坐标移动
      • 10.简单密码
      • 11.汽水瓶

1. 合并表记录

描述:数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

输入描述:先输入键值对的个数n(1 <= n <= 500)

接下来n行每行输入成对的index和value值,以空格隔开

输出描述:输出合并后的键值对(多行)

示例一:

输入 :

4

0 1

0 2

1 2

3 4

输出:

0 3

1 2

3 4

示例二:

输入:

3

0 1

0 2

8 9

输出:

0 3

8 9

参考代码:

python 复制代码
import sys
tmp_list = []
for line in sys.stdin:
	a = line.split()
	tmp_list.append(a)

count = int(tmp_list[0][0])
ele_list = tmp_list[1:]
result = []
n = 0
while n < count:
	m = n + 1
	tmp = ele_list[n]
	while m < count:
		if int(tmp[0]) == int(ele_list[m][0]):
			tmp = [tmp[0],str(int(tmp[1]) + int(ele_list[m][1]))]
		m += 1
	flag = True
	for k,v in result:
		if int(k) == int(tmp[0]):
		flag = False
	if flag:
		result.append(tmp)
	n += 1
new_index = [ int(k) for k,v in result ]
new_index.sort()
new_result = []
for index in new_index:
	for k,v in result:
		if index == int(k):
			new_result.append([k,v])
for k,v in new_result:
	print(k,v)

2. 提取不重复的整数

描述:输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是 0 。

输入描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例1:

输入:9876673

输出:37689

参考代码:

python 复制代码
import sys
tmp_list = None
for line in sys.stdin:
	a = line.split()[0]
	tmp_list = list(a)
tmp_list.reverse()
result = []
n = 0
while n < len(tmp_list):
	if tmp_list[n] not in result:
		result.append(tmp_list[n])
	n += 1
print(''.join(result))

3. 字符个数统计

描述:编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次,例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

输入描述:输入一行没有空格的字符串。

输出描述:输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。

示例1:

输入:abc

输出:3

示例2:

输入:aaa

输出:1

参考代码:

python 复制代码
import sys
for line in sys.stdin:
	a = line.split()[0]
	a_set = set(a)
	print(len(a_set))

4. 数字颠倒

描述:输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

输入描述:输入一个int整数

输出描述:将这个整数以字符串的形式逆序输出

示例1:

输入:1516000

输出:0006151

示例2:

输入:0

输出:0

参考代码:

python 复制代码
import sys
for line in sys.stdin:
	a = line.split()[0]
	b = list(a)
	b.reverse()
	print(''.join(b))

5. 字符串反转

描述:接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。

输入描述:输入一行,为一个只包含小写字母的字符串。

输出描述:输出该字符串反转后的字符串。

示例1:

输入:abcd

输出:dcba

参考代码:

python 复制代码
import sys
for line in sys.stdin:
	a = line.split()[0]
	b = list(a)
	b.reverse()
	print(''.join(b))

6.句子逆序

描述:将一个英文语句以单词为单位逆序排放。例如"I am a boy",逆序排放后为"boy a am I"

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

输入描述:输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述:得到逆序的句子

示例1:

输入:I am a boy

输出:boy a am I

示例2:

输入:nowcoder

输出:nowcoder

参考代码:

python 复制代码
import sys
for line in sys.stdin:
	a = line.split()
	a.reverse()
	print(' '.join(a))

7.字符串排序

描述:给定 n 个字符串,请对 n 个字符串按照字典序排列。

输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:数据输出n行,输出结果为按照字典序排列的字符串。

示例1:

输入:

9

cap

to

cat

card

two

too

up

boat

boot

输出:

boat

boot

cap

card

cat

to

too

two

up

参考代码:

python 复制代码
import sys
tmp_list = []
for line in sys.stdin:
	a = line.split()[0]
	tmp_list.append(a)
tmp_list = tmp_list[1:]
tmp_list.sort()
for _ in tmp_list:
	print(_)

8. 求int型正整数在内存中存储时1的个数

描述:输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。

输入描述:输入一个整数(int类型)

输出描述:这个数转换成2进制后,输出1的个数

示例1:

输入:5

输出:2

示例2:

输入:0

输出:0

参考代码:

python 复制代码
import sys
for line in sys.stdin:
	a = line.split()[0]
	b = bin(int(a))[2:].count('1')
	print(b)

9.坐标移动

描述:开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10; A1A; % ; YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

  • A10 = (-10,0)
  • S20 = (-10,-20)
  • W10 = (-10,-10)
  • D30 = (20,-10)
  • x = 无效
  • A1A = 无效
  • B10A11 = 无效
  • 一个空 不影响
  • A10 = (10,-10)
    结果 (10, -10)
    输入描述:一行字符串
    输出描述:最终坐标,以逗号分隔
    示例1
    输入:A10;S20;W10;D30;X;A1A;B10A11;;A10;
    输出:10,-10
    示例2
    输入:ABC;AKL;DA1;
    输出:0,0
    参考代码:
python 复制代码
import sys
import re
tmp_list = None
for line in sys.stdin:
	a = line.split()[0].split(";")
	tmp_list = list(a)
new_list = []
pattern = r"^[AWDS]\d+$"
for _ in tmp_list:
	if re.match(pattern,_)
		new_list.append(_)
X = 0
Y = 0
for _ in new_list:
	if _[0] == 'A':
		X -= int(_[1:])
	elif _[0] == 'S':
		Y -= int(_[1:])
	elif _[0] == 'W':
		Y += int(_[1:])
	elif _[0] == 'D':
		X += int(_[1:])

print("{},{}".format(X,Y))

10.简单密码

描述:现在有一种密码变换算法。

九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.

而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。

数字和其它的符号都不做变换。

输入描述:输入一组密码,长度不超过100个字符。

输出描述:输出密码变换后的字符串

示例1:

输入:YUANzhi1987

输出:zvbo9441987

参考代码:

python 复制代码
import sys
tmp_str = None
for line in sys.stdin:
	tmp_str = line.split()[0]
password_dict = {
	"abc": "2",
    "def": "3",
    "ghi": "4",
    "jkl": "5",
    "mno": "6",
    "pqrs": "7",
    "tuv": "8",
    "wxyz": "9",
}
result = ""
for _ in tmp_str:
	if _.isupper():
		t = _.lower()
		if t == "z":
			result += "a"
		else:
			tmp = ord(t) + 1
			result += chr(tmp)
	elif _.isnumeric():
		result += _
	else:
		for k,v in password_dict.items():
			if _ in k:
				result += v
			break
print(result)

11.汽水瓶

描述:某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。

小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。

输入描述:对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1:

输入:

3

10

81

0

输出:

1

5

40

参考代码:

python 复制代码
import sys
tmp_list = []
for line in sys.stdin:
	a = line.split()[0]
	tmp_list.append(a)
def fun(N):
	if N == 0 or N == 1:
		return 
	if N == 2:
		return 1
	if N == 3:
		return 1
	count = N // 3
	mod = N % 3
	return count + fun(count + mod)
相关推荐
咕咕吖2 分钟前
对称二叉树(力扣101)
算法·leetcode·职场和发展
九圣残炎34 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu39 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!1 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
yilylong1 小时前
鸿蒙(Harmony)实现滑块验证码
华为·harmonyos·鸿蒙
baby_hua1 小时前
HarmonyOS第一课——DevEco Studio的使用
华为·harmonyos
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
~yY…s<#>2 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode