牛客/华为机试/题库/在线编程
开发技巧:反向思维、先易后难、先死后活
puthon开发文档 教程-语法特性/库参考-标准库与内置对象/语言参考-内置函数
提示:满足题目输入输出条件,input()
中不必有提示语,否则在线编辑器会将提示语算作实际输出,导致结果错误。
入门
HJ7 取近似值
题目
描述
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。
数据范围:保证输入的数字在 32 位浮点数范围内
输入描述:
输入一个正浮点数值
输出描述:
输出该数值的近似整数值
解答
python">fvalue = (float)(input())
if fvalue % 1 >= 0.5:ovalue = (int) (fvalue // 1) + 1
else:ovalue = (int) (fvalue // 1)
print(ovalue)
时间:22ms 内存:4500+KB
知识点
基础数学、语法
键盘输入语句
str = input()
从键盘输入读取一行数据,返回字符串
浮点数
- python支持三种不同的数值类型,整型int、浮点型float、复数complex。
其中浮点型由整数部分与小数部分组成,分为32位单精度浮点数和64位双精度浮点数。
32位单精度浮点数:1位符号位表示正负;8位指数位表示指数;23位尾数位标识有效数字
显示类型转换
int(x)
向下取整
float(x)
将整数或字符串转换为浮点数
算数运算符
%
取模,返回除法的余数部分
//
取整,返回除法的整数部分
解答改进
思路:1 将读取的字符串转为浮点数
2 四舍五入:浮点数+0.5后向下取整
python">f = (float)(input())
print(int(f + 0.5))
HJ9 提取不重复的整数
题目
描述
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。
数据范围: 1≤𝑛≤10^8
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
解答
python">s = input() # 1 读取输入整数
# 2 倒叙读取不重复的元素
ns = '' # 创建空字符串,用于准备输出数据
list = list("0000000000") # 创建10位数组
for c in s[::-1]: # 从可迭代的倒序字符串依次读取元素if list[int(c)] == '0': # 用10位数组表示每个数字是否出现过,若为0表示还没出现过list[int(c)] = '1' # 将数组中元素置为1,表示这位下标数值已初选else:continue # 若已出现过,则结束本轮循环,继续执行下次循环,break表示结束整个for循环ns += c # 新序列添加未重复出现的元素
print(int(ns))
知识点
数组、哈希
列表/数组
创建列表/数组:无法直接根据元素数量创建,可使用表达式[x for x in iterable]
、使用类型的构造器list()
、list(iterable)
创建多位数组:print([0] * 10)
字符串
创建字符串:'' "" 'xxx' "abc"
len(str)
返回字符串长度
切片
序列[起始索引:结束索引:步长]
从一个序列中取出前闭后开的子序列,形成一个新序列
for循环
遍历可迭代对象
python">for <variable> in <sequence>:<statements>
else:<statements>
解答改进
python">s = input()
ns = ''
for c in s[::-1]:if c not in ns: # 判断元素是否存在待输出内容中即可ns += c
print(int(ns))
HJ46 截取字符串
题目
描述
输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出
数据范围:字符串长度满足 1≤𝑛≤1000,1≤k≤n
输入描述:
1.输入待截取的字符串
2.输入一个正整数k,代表截取的长度
输出描述:
截取后的字符串
解答
python">s = input()
k = int(input())
print(s[:k])
HJ58 输入n个整数,输入其中最小的k个
题目
描述
输入n个整数,找出其中最小的k个整数并按升序输出
本题有多组输入样例
数据范围:1≤n≤1000 ,输入的整数满足 1≤val≤10000
输入描述:
第一行输入两个整数n和k
第二行输入一个整数数组
输出描述:
从小到大输出最小的k个整数,用空格分开。
示例:
输入:16 8
2163 7241 7053 8161 2847 5214 60 1386 4089 2448 3747 9573 3113 6155 7659 713
输出:60 713 1386 2163 2448 2847 3113 3747
解答
python">[n, k] = input().split() # split()默认空格切割
l = input().split() # 数组元素是字符串
nl = list(map(int, l)) # 将列表中字符串元素转换成整数
nl.sort() # 默认升序
for c in nl[:int(k)]:print(c, end=" ") # end以空格结尾
知识点
map()
map(function, iterable, ...)
返回每个元素按函数映射的迭代器
HJ101 输入整型数组和
题目
描述
输入整型数组和排序标识,对其元素按照升序或降序进行排序
数据范围: 1≤n≤1000 ,元素大小满足 0≤val≤100000
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输出描述:
输出排好序的数字
解答
python">n = input()
l = list(map(int, input().split())) # 若不把字符串元素转换成数值,列表排序时会按照字符串大小比较
t = int(input())
if t == 0:l.sort()
else:l.sort(reverse=True)
for c in l:print(c, end=" ")