目录
前言
事先总结:今天c语言学习约等于0
一、python列表的常规操作
请注意,123456789数字是一个 9 位数字,由 1 到 9 之间的数字完全组成,没有重复。加倍,我们将得到246913578,这恰好是另一个9位数字,恰好由1到9的数字组成,只是以不同的排列方式。检查一下结果,如果我们再次加倍!
现在,您应该检查此属性是否还有更多数字。也就是说,将给定数字加倍k数字,您将判断生成的数字是否仅由原始数字中的数字排列组成。
输入规格:
每个输入包含一个测试用例。每个事例都包含一个不超过 20 位数字的正整数。
输出规格:
对于每个测试用例,如果输入数字加倍得到的数字仅由原始数字的排列组成的数字,请首先打印一行"是";如果不是,则为"否"。然后在下一行中,打印双倍的数字。
思考:看到题干,心里只有一句:人生苦短我学python
a=eval(input())
b=a*2
c=list(str(a))
d=list(str(b))
c.sort()
d.sort()
if c==d:
print("yes")
print(b)
else:
print("no")
print(b)
二、一些有点“棘手”的问题
1.比如:哥德巴赫猜想
7-14 哥德巴赫猜想
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。 比如:24=5+19,其中5和19都是素数。 本实验的任务是设计一个程序,验证5000以内的偶数都可以分解成两个素数之和。
输入格式:
输入在一行中给出一个(2, 5000]范围内的偶数N。
输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p \le≤ q均为素数。 又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
思路:其实我思考的大致方向是对的,但关于为什么我自己写不对,这是一个悲伤的故事了呜呜呜来看:
def prime(p):
if p<=1:
return False
else:
for i in range(2,int(p**0.5)+1):
if p%i==0:
return False
return True
a=[]
n=eval(input())
for j in range(n):
if prime(j):
a.append(j)
d=[]
for i in a:
for k in a:
if n==i+k:
d.append(i)
d.append(k)
break
break//关于我怎么也用不好双重for循环里的break这件事,请小点声笑呜呜呜
print(f"{n} = {d[0]} + {d[1]}")
这明显是错的,不知道为啥,啥也没有,如果有哪位看出来错了,请dd我
然后我经过“不懈努力”,好吧,就是去博客里搜了看看,得出来了不需要双重for的正解如下,至此这道题算是过了......
def prime(p):
if p<=1:
return False
else:
for i in range(2,int(p**0.5)+1):
if p%i==0:
return False
return True
n=eval(input())
for i in range(2,int(n/2)+1):
if prime(i) and prime(n-i):
print(n, "=", i, "+", n - i)
break
2.python的全排列
我丢,其实我想到了python也会有全排列函数,架不住比c里的更难用啊
7-11 输出全排列
请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式:
输入给出正整数n(<10)。
输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,⋯,an排在序列b1,b2,⋯,bn之前,如果存在k使得a1=b1,⋯,ak=bk 并且 ak+1<bk+1。
import itertools
n=eval(input())
a=[str(i) for i in range(1,n+1)]
s=""
s=s.join(a)
for i in itertools.permutations(s):
print (''.join(i))
没别的毛病,就死记着呗
总结
这样一看,我今天是啥也没学呢,不说了,哭一会去,顺便再做会python的emoji表情呜呜呜