1. 逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
num = input().strip()
num2 = int(num[::-1])
print(num2)
2. 12-24小时制
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式:
输入在一行中给出带有中间的
:
符号(半角的冒号)的24小时制的时间,如12:34
表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6
表示5点零6分。
输出格式:在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串
AM
或表示下午的字符串PM
。如5:6 PM
表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00
就是12小时制的12:0 PM
;而0点被认为是第二天的时间,所以是0:0 AM
。输入样例:
21:11
输出样例:
9:11 PM
str1 = input().strip().split(':')
hour = int(str1[0])
minutes = int(str1[1])
if hour < 12:
flag = 'AM'
else:
flag = 'PM'
if hour > 12:
hour -= 12
print(f'{hour}:{minutes} {flag}')
3. 超速检测
模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。
输入格式:
输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。
输出格式:
在一行中输出测速仪显示结果,格式为:
Speed: V - S
,其中V
是车速,S
或者是Speeding
、或者是OK
。输入样例1:
40
输出样例1:
Speed: 40 - OK
输入样例2:
75
输出样例2:
Speed: 75 - Speeding
#include <stdio.h>
int main()
{
int speed;
scanf("%d", &speed);
if (speed > 60)
printf("Speed: %d - Speeding\n", speed);
else
printf("Speed: %d - OK\n", speed);
return 0;
}
4. 用天平找球
三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。
输入格式:
输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式:
在一行中输出唯一的那个不一样的球。
输入样例:
1 1 2
输出样例:
C
#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d %d %d",&a, &b, &c);
if(a != b && a != c)
printf("A\n");
if(b != a && b != c)
printf("B\n");
if(c != a && c != b)
printf("C\n");
return 0;
}
5. 计算工资
某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。
输入格式:
输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。
输出格式:
在一行输出该员工的周薪,精确到小数点后2位。
输入样例1:
5 40
输出样例1:
2000.00
输入样例2:
3 50
输出样例2:
1650.00
#include <stdio.h>
int main()
{
int work_year, work_hours;
float salary;
scanf("%d %d", &work_year, &work_hours);
if (work_year < 5)
{
if (work_hours <= 40)
salary = 30 * work_hours;
else
salary = 30 * 40 + 30 * 1.5 * (work_hours - 40);
}else{
if (work_hours <= 40)
salary = 50 * work_hours;
else
salary = 50 * 40 + 50 * 1.5 * (work_hours - 40);
}
printf("%.2f", salary);
return 0;
}
6. 计算水费
为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:
当x不超过15吨时,
y=4x/3 y=4x/3 y=4x/3
超过后,
y=2.5x−17.5 y=2.5x-17.5 y=2.5x−17.5
请编写程序实现水费的计算。输入格式:
输入在一行中给出非负实数x。
输出格式:
在一行输出应交的水费,精确到小数点后2位。
输入样例1:
12
输出样例1:
16.00
输入样例2:
16
输出样例2:
22.50
#include <stdio.h>
int main()
{
float x, y;
scanf("%f", &x);
if (x <= 15)
y = x * 4 / 3;
else
y = 2.5 * x - 17.5;
printf("%.2f", y);
return 0;
}
7. 日K蜡烛图
股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。
如果Close<Open,表示为“BW-Solid”(即“实心蓝白蜡烛”);
如果Close>Open,表示为“R-Hollow”(即“空心红蜡烛”);
如果Open等于Close,则为“R-Cross”(即“十字红蜡烛”)。
如果Low比Open和Close低,称为“Lower Shadow”(即“有下影线”),如果High比Open和Close高,称为“Upper Shadow”(即“有上影线”)。
根据给定的四个价格组合,判断当日的蜡烛是一根什么样的蜡烛。输入格式:
输入在一行中给出4个正实数,分别对应Open、High、Low、Close,其间以空格分隔。
输出格式:
在一行中输出日K蜡烛的类型。如果有上、下影线,则在类型后加上
with 影线类型
。如果两种影线都有,则输出with Lower Shadow and Upper Shadow
。输入样例1:
5.110 5.250 5.100 5.105
输出样例1:
BW-Solid with Lower Shadow and Upper Shadow
输入样例2:
5.110 5.110 5.110 5.110
输出样例2:
R-Cross
输入样例3:
5.110 5.125 5.112 5.126
输出样例3:
R-Hollow
numbers = [float(i) for i in input().strip().split(' ')]
open, high, low, close = numbers
if close < open:
ans = "BW-Solid"
if close > open:
ans = "R-Hollow"
if open == close:
ans = "R-Cross"
line_type = []
if low < open and low < close:
line_type.append("Lower Shadow")
if high > open and high > close:
line_type.append("Upper Shadow")
if len(line_type) == 0:
print(ans)
elif len(line_type) == 1:
print(f"{ans} with {line_type[0]}")
else:
print(f"{ans} with {line_type[0]} and {line_type[1]}")
8. 求符合给定条件的整数集
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:
2
** 输出样例:**
234 235 243 245 253 254 324 325 342 345 352 354 423 425 432 435 452 453 523 524 532 534 542 543
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
int i, j, k, count = 0;
for(i = a; i <= a+3; i++)
{
for(j = a; j<= a+3;j++)
{
for(k = a; k <= a+3; k++)
{
if(i!=j && i!=k && j != k)
{
count++;
if(count % 6 != 0)
{
printf("%d ", i*100+j*10+k);
}
else
printf("%d\n", i*100+j*10+k);
}
}
}
}
return 0;
}
9. 打印口诀表
对任意给定的一位正整数
N
,输出从1*1
到N*N
的部分口诀表。输入格式:
输入在一行中给出一个正整数
N
(1≤N
≤9)。输出格式:
输出下三角
N*N
部分口诀表,其中等号右边数字占4位、左对齐。输入样例:
4
输出样例:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int i, j;
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
{
printf("%d*%d=%-4d", j, i, i*j);
}
printf("\n");
}
return 0;
}
10. 求特殊方程的正整数解
对任意给定的正整数N,求方程
x2+y2=N x^2+y^2=Nx2+y2=N的全部正整数解。输入格式:
输入在一行中给出正整数N(≤10000)。
输出格式:
输出方程X2+Y2=N的全部正整数解,其中X≤Y。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出
No Solution
。输入样例1:
884
输出样例1:
10 28 20 22
输入样例2:
11
输出样例2:
No Solution
import math
n = int(input().strip())
ans_dict = {}
for i in range(1, int(math.sqrt(n)) + 1):
for j in range(1, i + 1):
if i * i + j * j == n:
ans_dict[j] = i
if len(ans_dict) == 0:
print("No Solution")
else:
# 按键排序
ans_list = sorted(ans_dict.items(), key=lambda x: x[0])
for i in ans_list:
print(f'{i[0]} {i[1]}')
11. 约分最简式
分数可以表示为
分子/分母
的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。输入格式:
输入在一行中给出一个分数,分子和分母中间以斜杠
/
分隔,如:12/34
表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。提示:
- 对于C语言,在
scanf
的格式字符串中加入/
,让scanf
来处理这个斜杠。- 对于Python语言,用
a,b=map(int, input().split('/'))
这样的代码来处理这个斜杠。输出格式:
在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用
分子/分母
的形式表示分数。如
5/6
表示6分之5。输入样例:
66/120
输出样例:
11/20
def gcd(a, b):
"""求a和b的最大公约数"""
if a > b:
a, b = b, a
ans = 1
for i in range(2, a + 1):
if (a % i == 0) and (b % i == 0):
ans = i
return ans
a, b = map(int, input().split('/'))
gcd = gcd(a, b) # 求a和b的最大公约数
# 分子分母整除最大公约数
a = a // gcd
b = b // gcd
print(f'{a}/{b}')
12. 单词长度
你的程序要读入一行文本,其中以空格分隔为若干个单词,以
.
结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's
算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.
不计算在内。输入格式:
输入在一行中给出一行文本,以
.
结束输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
str = input().strip().strip('.').split(' ')
list_len = [len(i) for i in str if i]
for i in range(len(list_len)):
if i != len(list_len)-1:
print(list_len[i], end=' ')
else:
print(list_len[i])
13. 删除字符串中的子串
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat cat
输出样例:
Tom is a male
def remove_substr(str1, str2):
while str1.find(str2) != -1:
str1 = str1.replace(str2, '')
return str1
s1 = input()
s2 = input()
print(remove_substr(s1, s2))
14. 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
str1 = input().strip().split(' ')
list1 = [i for i in str1 if i]
print(' '.join(list1[::-1]))
15. 有理数加法
计算两个有理数的和。
输入格式:
输入在一行中按照
a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。输出格式:
在一行中按照
a/b
的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
def gcd(a, b):
if a > b:
a, b = b, a
ans = 1
for i in range(2, a + 1):
if (a % i == 0) and (b % i == 0):
ans = i
return ans
list1 = input().strip().split(' ')
num1, num2 = list1[0], list1[1]
a1, b1 = map(int, num1.split('/'))
a2, b2 = map(int, num2.split('/'))
# 得到相加后的分子、分母
a = a1 * b2 + a2 * b1
b = b1 * b2
gcd = gcd(a, b) # 求分子和分母的最大公约数
# 对分子、分母进行化简
a = a // gcd
b = b // gcd
if b == 1:
print(f'{a}')
else:
print(f'{a}/{b}')
16. 通讯录的录入与显示
通讯录中的一条记录包含下述基本信息:姓名、出生日期、性别、固定电话号码、移动电话号码。
本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。输入格式:
输入在第一行给出正整数N(≤10);随后N行,每行按照格式
姓名 生日 性别 固话 手机
给出一条记录。其中姓名
是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd
的格式给出年月日;性别用M
表示“男”、F
表示“女”;固话
和手机
均为不超过15位的连续数字,前面有可能出现+
。在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出格式:
对每一条要查询的记录编号,在一行中按照
姓名 固话 手机 性别 生日
的格式输出该记录。若要查询的记录不存在,则输出Not Found
。输入样例:
3 Chris 1984/03/10 F +86181779452 13707010007 LaoLao 1967/11/30 F 057187951100 +8618618623333 QiaoLin 1980/01/01 M 84172333 10086 2 1 7
输出样例:
LaoLao 057187951100 +8618618623333 F 1967/11/30 Not Found
n = int(input())
contacts = []
for i in range(n):
name, birth, sex, fixed, mobile = input().strip().split(' ')
contacts.append({'name': name, 'fixed': fixed, 'mobile': mobile, 'sex': sex, 'birth': birth})
numbers = [int(i) for i in input().strip().split(' ')]
for i in numbers[1:]:
if 0 <= i <= n - 1:
# print(contacts[i].values())
print(' '.join(list(contacts[i].values())))
else:
print('Not Found')