7-11 分段计算居民水费
问题描述:
为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。输入格式:
输入在一行中给出非负实数x。输出格式:
在一行输出应交的水费,精确到小数点后2位。
参考代码
x=int(input())
if x<=15 :
y=4*x/3
else :
y=2.5*x-17.5
print("%.2f"%y)
新语法点
- 无
7-12 两个数的简单计算器
问题描述:
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。输出格式:
当运算符为+
、-
、*
、/
、%
时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR
。
参考代码
x,op,y=input().split(' ')
x=int(x)
y=int(y)
if op=='+' :
print(x+y)
elif op=='-' :
print(x-y)
elif op=='*' :
print(x*y)
elif op=='/' :
print(int(x/y))
elif op=='%' :
print(x%y)
else :
print("ERROR")
新语法点
- 涉及负数的整数除法修正:
print(int(x/y))
7-13 日K蜡烛图
问题描述:
股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。
如果CloseOpen,表示为“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
。
参考代码
Open,High,Low,Close=map(float,input().split(' '))
if CloseOpen :
print("R-Hollow",end=(''))
else :
print("R-Cross",end=(''))
if (Lowmax(Open,Close)) :
U=True
else :
U=False
if L and U :
print(" with Lower Shadow and Upper Shadow")
elif L :
print(" with Lower Shadow")
elif U:
print(" with Upper Shadow")
新语法点
- 无
7-14 求整数段和
问题描述:
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X
的格式输出全部数字的和X
。
参考代码
A,B=map(int,input().split(' '))
cnt=sum=0
for i in range(A,B+1) :
cnt+=1
sum+=i
print("%5d"%i,end=(''))
if cnt==5 :
print()
cnt=0
if (cnt) :
print()
print("Sum = %d"%sum)
新语法点
- for循环语句:
for i in range(A,B+1) :
- 占位控制与右对齐:
print("%5d"%i,end=(''))
7-15 计算圆周率
问题描述:
根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
输入格式:
输入在一行中给出小于1的阈值。输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
参考代码
l=float(input())
item=sum=t=1
while item>=l :
item=item*t/(2*t+1)
sum+=item
t+=1
print("%.6f"%(sum*2))
新语法点
- 无
7-16 求符合给定条件的整数集
问题描述:
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。输入格式:
输入在一行中给出A。输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
参考代码
A=int(input())
cnt=0
for i in range(A,A+4) :
for j in range(A,A+4) :
for k in range(A,A+4) :
if i!=j and j!=k and k!=i :
cnt+=1
item=i*100+j*10+k
print("%d"%item,end=(''))
if cnt%6==0 :
print()
else :
print(' ',end=(''))
新语法点
- 无
7-17 爬动的蠕虫
问题描述:
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
参考代码
N,U,D=map(int,input().split())
time=0
while N>0 :
if U>=N :
time+=1
N-=U
break
else :
time+=2
N-=U-D
print(time)
exit(0)
新语法点
- 无
7-18 二分法求多项式单根
问题描述:二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0。
二分法的步骤为:
- 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则
- 如果f(a)f(b)<0,则计算中点的值f((a+b)/2);
- 如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则
- 如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2,重复循环;
- 如果f((a+b)/2)与f(b)同号,则说明根在区间[a,(a+b)/2],令b=(a+b)/2,重复循环。
本题目要求编写程序,计算给定3阶多项式在给定区间[a,b]内的根。
输入格式:
输入在第1行中顺序给出多项式的4个系数a3、a2、a1、a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。输出格式:
在一行中输出该多项式在该区间内的根,精确到小数点后2位。
参考代码
global L
L=[0,0,0,0]
def f(x) :
return L[0]+x*(L[1]+x*(L[2]+x*L[3]))
L[3],L[2],L[1],L[0]=map(float, input().split())
a,b=map(float,input().split())
l=a;r=b
while r-l>0.0001 :
fl=f(l)
fr=f(r)
if fl==0 :
r=l
break
elif fr==0 :
l=r
break
if fl*fr<0 :
mid=(r+l)/2
fm=f(mid)
if fm==0 :
l=r=mid
break
elif fm*fl<0 :
r=mid
else :
l=mid
print("%.2f"%l)
新语法点
- 全局变量:
global L
- 列表(list)数据类型:
L=[0,0,0,0]
- 自定义函数:
def f(x) :
7-19 支票面额
问题描述:
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?输入格式:
输入在一行中给出小于100的正整数n。输出格式:
在一行中按格式y.f
输出该支票的原始面额。如果无解,则输出No Solution
。
参考代码
n=int(input())
y=f=-1
for i in range(0,100) :
if (199*i+n)%98==0 :
y=i
f=(199*y+n)//98
break
if y==-1 or f>=100:
print("No Solution")
else :
print("%d.%d"%(y,f))
新语法点
- 无
7-20 打印九九口诀表
问题描述:下面是一个完整的下三角九九口诀表:
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 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本题要求对任意给定的一位正整数
N
,输出从1*1
到N*N
的部分口诀表。输入格式:
输入在一行中给出一个正整数N
(1≤N
≤9)。输出格式:
输出下三角N*N
部分口诀表,其中等号右边数字占4位、左对齐。
参考代码
n=int(input())
for i in range(1,n+1) :
for j in range(1,i+1) :
print("%d*%d=%-4d"%(j,i,i*j),end=(''))
print()
新语法点
- 占位控制与左对齐:
print("%d*%d=%-4d"%(j,i,i*j),end=(''))