problem 1
编写一个程序把输入整数颠倒后存入另一个变量并输出。例如:输入\(1230\),输出\(321\)
输入样例:
12345
输出样例:
54321
解题思路:就把元组里面元素反转就好了,循环就能解决,注意一下前导\(0\)的去除就可以了,我这里是用了一个标记\(f\),\(len\)函数和\(continue\)语句用法可以在上一篇中找到,这里不再赘述了。
代码:
s=input();
l=len(s);
f=1;
for i in range(l-1,-1,-1) :
if(f==1 and s[i]=='0') :
continue;
f=0;
print(s[i],end='');
problme 2
自然常数\(e\)可以用级数:\(1+1/1!+1/2!+...+1/n!\)来近似计算。输入一个小于\(1\)的正数作为阈值\(x\),用该公式计算\(e\)的近似值,直到最后一项\((1/n!)\)小于给定的阈值为止。
输入样例:
0.00001
输出样例:
2.71827876984127
解题思路:这题跟上篇那个题目很像,上个题目会了,这个肯定也会了,没啥好说的。
代码:
from math import *
def f(n) :
return 1/factorial(n);
x=float(input())
e=js=0;
while("我真牛") :
o=f(js);
if(o<x) :
break;
e+=o;
js+=1;
print(e);
problem 3
角谷猜想。输入一个正整数\(n\),
1)若为偶数,则将\(n\)变换为\(n=n/2\)
2)若为奇数,则将\(n\)变换为\(n=3*n+1\)
3)重复上述步骤,直到\(n\)为\(1\)(经过上述两步的多次变换,总会变为\(1\),这就是角谷猜想)
4)若输入的\(n\)小于\(1\),则输出'\(data error\)'
5) 若输入的数据是非数字的字符串,如:\(abc\),则输出'非法输入'(提示:使用异常处理)
输出重复运算的次数
输入样例:
3
输出样例:
7
解题思路:注意一下使用异常处理就好了,也就是\(try\),\(except\),\(else\)语句,可以百度一下,不难理解,\(try\)是前提,所有情况都要执行\(try\)里面的语句,\(except\)是出错时执行,\(else\)自然就是正常情况下。
代码:
try :
n=int(input());
except ValueError : # 意思是出现了非法输入的错误。
print("非法输入");
else :
if(n<1) :
print("data error");
exit(0);
if(n==1) :
print("0");
exit(0);
js=0;
while(233) :
if(n==1):
break;
if(n&1) :
n=3*n+1;
js+=1;
else :
n>>=1; # 像上篇讲的右移,这个是左移,也就是除2,等同于n/=2。
js+=1;
print(js);
problem 4
编写程序,输入一个大于\(0\)的正整数,分解质因数并输出。例如,当输入\(90\)后,输出为\(1*2*3*3*5\).
输入样例:
90
输出样例:
90=1*2*3*3*5
解题思路:最小的质数是\(2\),挨个数除就好了,不用担心被合数除,因为\(4\),\(6\),\(8\)都是\(2\)的倍数,在\(2\)的时候就已经除完了,所以每次除的必是质数,\(1\)特判一下就行,理论上这个题是错的,因为\(1\)不是质数,也不是合数,题面描述有误,不过不影响大家做题,至于\(sep\)和\(end\)的使用,一个是分离,一个是不换行,老师都讲过。
代码:
n=int(input());
if(n==1) :
print("1=1");
exit(0);
print(n,"=1*",sep='',end='');
i=2;
while("你好厉害") :
if(n==1) :
break;
while(n%i==0) :
if(n/i==1) :
print(i);
n/=i;
break;
else :
print(i,"*",sep='',end='');
n/=i;
i+=1;
problem 5
绘制如下图案:
1
222
33333
4444444
输入一个正整数\(n(1<=n<=9)\),输出\(n\)行。
输入样例:
4
输出样例:
1
222
33333
4444444
解题思路:我的评价是,题目越来越傻了。。。循环的时候注意一下空格还有数字的个数就可以了,也没什么好说的,就是循环套循环呗。
代码:
n=int(input());
k=n-1;
for i in range(1,n+1) :
for j in range(1,k+1) :
print(" ",end='');
for j in range(1,2*(i-1)+2) :
print(i,end='');
k-=1;
print('\n'); # 这个是换行符。
problem 6
我国古代数学家张丘建在《张丘建算经》一书中提出一个数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?
在同一行内输入用空格分隔的两个正整数,分别表示鸡的总数量和总钱数,计算鸡翁、鸡母、鸡雏各为多少?
如果有多个解,则输出多行,并按鸡翁数量由少到多的顺序输出;每行输出3个空格分开的数,分别代表鸡翁、鸡母、鸡雏的数量。
如果无解则输出"无解"。
输入样例:
99 99
输出样例:
1 23 75
5 16 78
9 9 81
13 2 84
解题思路:看到这个题不由得想起了高中竞赛学习的贪心算法,百万钱买百万鸡,不过这个题跟那个肯定没法比,这题轻轻松松,看上去需要三重循环,实则两重就可以了,因为知道了两种鸡的个数,另一种一减就出来了。
代码:
n,m=map(int,input().split())
f=1;
for i in range(1,n+1) :
for j in range(1,n-i+1) :
k=n-i-j;
if(k==0) :
continue;
if(5*i+3*j+k/3==m) :
print(i,j,k,sep=' ');
f=0;
if(f==1) :
print("无解");
problem 7
一个正整数,如果等于组成它的各位数字的阶乘之和,则该正整数称为阶乘和数。例
如正整数\(145\),\(1!+4!+5!\)等于\(145\),因此\(145\)是一个阶乘和数。输入一个正整数,计算它的
各位数字的阶乘之和,判断它是否是一个阶乘和数。当输入的数字为阶乘和数时,输出
“YES”,否则输出“NO”。
输入样例:
145
输出样例:
YES
解题思路:可以先把输入的东西当作字符串,然后一个一个转化累加,定义俩变量,一个用阶乘,一个正常加,最后看看俩是不是相等就可以了,没啥难度。
代码:
from math import *
s=input();
l=len(s);
n=m=0;
js=l-1;
for i in range(0,l) :
o=int(s[i]);
m+=factorial(o);
n+=o*10**js;
js-=1;
if(n^m) : # 这里我还是用了位运算异或,等同于n!=m,不过我喜欢位运算,习惯了。
print("NO");
else :
print("YES");
problem 8
用户输入一个数据,判断用户输入的是复数(\(complex\))、浮点数(\(float\))、整数(\(int\)),还是字符串(\(string\)),输出括号中与之匹配的数据类型。如果输入数据不是上述\(4\)种类型,如\(tuple\)、\(list\)等数据,则输出:其它类型
提示:利用\(eval()\)、\(type()\)、\(str()\)函数,以及异常处理
输入样例1:
145
输出样例1:
int
输入样例2:
(1,2)
输出样例2:
其它类型
解题思路:也是不难,题目让你干啥你干啥就行了,直接啊对对对,你说的都对,跟循环一点关系都没有,还是异常处理,跟上面那个题一样,因为异常处理的肯定都是字符串,所以直接输出\(string\)类型就好了,别的就按部就班判断着来就可以了。
代码:
try:
n=eval(input());
except :
print("string");
exit(0);
else :
if(type(n)==int) :
print("int");
elif(type(n)==float) :
print("float");
elif(type(n)==complex) :
print("complex");
elif(type(n)==str) :
print("str");
else :
print("其它类型");
标签:输出,Python,样例,笔记,int,循环,print,input,输入
From: https://www.cnblogs.com/grcyh/p/16743652.html