PythonTip--8.4

xiaoxiao2021-02-27  145

整数解

题目描述: 给你两个整数a和b(-10000 < a,b<10000),请你判断是否存在两个整数,他们的和为a,乘积为b。 若存在,输出Yes 不存在,则输出No

思路: 最最笨的方法应该就是直接循环了。。。 讲稍微优化一点的: 因为知道的一个是和,一个是积,又是求两个解,这样就可以想到初中学过的一元二次方程。ax^2 +b*X+c=0 和 = -b/a 积 = c/a

为了 更简单一点,方程设为 x^2-a*x+b=0 这样:和 = a 积 = b 所以delta= a^2-4*b 因为题目要求是两个整数解,所以要判断delta是否小于0, 两个解分别为

x = (b+delta^0.5)/2 y= (b-delta^0.5)/2

因为还要是整数,所以再判断一下

(b+delta^0.5)%2 == 0 (b-delta^0.5)%2 == 0

这样就差不多了,下面贴代码: 代码

import math def func2(a,b): delta = a**2-4*b if delta <0: return "No" x1 = (a+math.sqrt(delta))/2 x1_1 = (a+math.sqrt(delta))%2 x2 = (a-math.sqrt(delta))/2 x2_1 = (a-math.sqrt(delta))%2 if x1_1==0 and x2_1 ==0: return 'Yes' else:return 'No' print(func2(a,b))

=============分割线==========

py数

题目描述: Py从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992, 这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22, 同时它的十二进制数表示1894,其四位数字之和也为22,啊哈,真是巧啊。 Py非常喜欢这种四位数,由于他的发现,所以这里我们命名其为Py数。 现在给你一个十进制4位数n,你来判断n是不是Py数,若是,则输出Yes,否则输出No。 如n=2992,则输出Yes; n = 9999,则输出No。

思路: 这题就把每个进制的数加起来比较一下吧,没什么绕的。。。

代码

n=2991 def func(n): int_sum = 0 int_num = n while int_num : int_sum += (int_num % 10) int_num //= 10 hex_num = n hex_sum = 0 while hex_num: hex_sum += (hex_num%16) hex_num //=16 twe_num = n twe_sum = 0 while twe_num: twe_sum += (twe_num%12) twe_num//=12 if int_sum == hex_sum == twe_sum: return 'Yes' return 'No' print(func(n))

=============分割线=============

分差素数和

题目描述: 把一个偶数拆成两个不同素数的和,有几种拆法呢? 现在来考虑考虑这个问题,给你一个不超过10000的正的偶数n, 计算将该数拆成两个不同的素数之和的方法数,并输出。 如n=10,可以拆成3+7,只有这一种方法,因此输出1.

思路: 先定义一个函数,判断是否是素数,然后一个个循环判断吧。

代码

n = 10 def isPrime(n): for i in range(2,n//2+1): if n%i == 0: return False return True def func(n): count = 0 for i in range(2,n//2+1): if isPrime(i) and isPrime(n-i) and i!= n-i: count+=1 return count print(func(n))
转载请注明原文地址: https://www.6miu.com/read-12205.html

最新回复(0)