大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
这四句话的意思是:
有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔,假设鸡和兔都正常,无残疾。如无解则输出Data Error!
a,b = map(int,input().split(' '))
x = -b//2+2*a
y = b//2-a
if(isinstance(x,int) and isinstance(y,int) and (x>=0) and (y>=0)):
print(x ,y)
else:
print('Data Error!')
中国目前采用的是18位身份证号,其第7-10位数字是出生年,11-12位是出生月份,13-14是出生日期,第17位是性别,奇数为男性,偶数为女性,第18位是校验位。
如果身份证号码的其中一位填错了(包括最后一个校验位),则校验算法可以检测出来。如果身份证号的相邻2位填反了,则校验算法可以检测出来。校验规则如下:
1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2. 将这17位数字和系数相乘的结果相加。
3. 用加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10
分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
4. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X(大写英文字母X)。如果余数是10,身份证的最后一位号码就是2。
用户输入一个身份证号,校验其是否是合法的身份证号码。
a = input()
b = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
c = '10X98765432'
j = 0
s = 0
for i in a[:-1]:
s +=eval(i)*b[j] # 此处也可用int
j += 1
if a[-1] == c[s%11]:
print('身份证号码校验为合法号码!')
else:
print('身份证校验位错误!')
读入一个整数N,分别计算如下内容:
N的绝对值;
N与10进行同符号加法、减法和乘法运算,同符号运算指使用N的绝对值与另一个数进行运算,运算结果的绝对值被赋予N相同的符号,其中,0的符号是正号。
将上述4项结果在一行输出,采用空格分隔,输出结果均为整数。
N = int(input())
a = abs(N)
b = a+10
c = a-10
d = a*10
if N >= 0:
print(a ,b ,abs(c) ,d )
else:
print(a ,-b ,-abs(c) ,-d )
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出最小的N(1 <= N <= 4)个完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
输入格式 一个正整数N(最小的前N个完数),如:1
输出格式 如:6=1+2+3
def factorsum(n):
s = 0
list=[] #存放因子
for i in range(1,int(n/2)+1):
if n%i == 0:
s += i
list.append(i)
if s == n and i == int(n/2): #确保遍历所有的因子
return list
return False
N = int(input())
j = 6
count = 0
while count<N:
list = factorsum(j)
if list:
count += 1
print('%d='%j,end='')
for x in list:
if x == list[-1]: #最后一个因子后面不加'+'
print('%d'%x)
else:
print('%d+'%x,end='')
j+=1;
用户输入一个正整数N,计算并输出小于N的最大素数
def isPrime(n):
for i in range(2,int(n/2)):
if n%i == 0:
return False
break
return True
a = int(input())
i = a-1
while i >= 2:
if isPrime(i):
print (i)
break
i-=1
分解质因数只针对合数(非质数或者非素数,不包括1在内), 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。
def isPrime(n):
for i in range(2,int(n/2)+1):
if n%i==0:
return False
break
return True
n = int(input())
a = [] #存放质因子
s = n
i = 2
while i <= int(n/2):
if s%i == 0 and isPrime(i):
a.append(i)
s/=i
if isPrime(s): #说明找到合数的最后一个分解质因数
a.append(int(s))
break
i=1 #为了每次从2开始
i+=1
print(a)
水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。用户输入一个正整数N,输出所有N位的水仙花数。
#注意int、str类型
n=int(input())
for i in range(10**(n-1),10**n):
s = 0
for j in str(i):
s += int(j)**n
if s == i:
print(i,end='\n')
计算从1-n的阶乘之和。
a = int(input())
s = 1
c = 0
for j in range(a):
for i in range(j+1):
s*=(i+1)
c += s
s = 1
print(c)