18224: 找魔数
bute force/tow pointers, http://cs101.openjudge.cn/practice/18224
一个数如果能表示为两个完全平方数的和(两个正整数的平方和,如:2^2^+4^2^=20, 1^2^+4^2^=17),则称为魔数。要求你在一堆数字中找出魔数,并且分别以二进制、八进制、十六进制输出这个数字。
输入
第一行1个整数,代表m个数字(1 ≤ m ≤ 100) 接下来1行,为m个整数, X~i~ (1 ≤ X~i~ ≤ 1000)。
输出
每个魔数1行,以空格间隔输出该魔数的二进制、八进制、十六进制 (注:如果出现abcdef等字母,都按小写输出)
样例输入
4
3 9 20 17样例输出
0b10100 0o24 0x14
0b10001 0o21 0x11提示: python有函数bin, oct, hex
来源: cs101-2018
练习不同进制的输出,print(bin(num), oct(num), hex(num))
python
l = []
i = 1
while i*i < 1000:
l.append(i*i)
i += 1
magics = []
for i in l:
for j in l:
magics.append(i+j)
m = int(input())
x = [int(i) for i in input().split()]
for num in x:
if num in magics:
print(bin(num), oct(num), hex(num))python
m=int(input())
s=[int(x) for x in input().split()]
for i in range(m):
x=s[i]
a=1
ok=False
while (a*a)<=x:
for b in range(1,a+1):
if a*a+b*b==x:
print('{0:#b} {0:#o} {0:#x}'.format(x))
ok=True
break
if ok:
break
a+=12020fall-cs101,颜蓓琪
这题在模拟考试的时候想到了能用双指针的做法,但是不太熟练双指针,所以上网搜了参考。
python
# tow pointers
n=int(input())
seq=[int(x) for x in input().split()]
for i in seq:
left,right=1,int(i**0.5)+1
while left<=right:
if left**2+right**2==i:
print(str(bin(i))+' '+str(oct(i))+' '+str(hex(i)))
break
elif left**2+right**2>i:
right-=1
elif left**2+right**2<i:
left+=1