01 - 女神的手机号
本帖最后由 鱼C-小师妹 于 2021-3-25 10:25 编辑在线讲解:
https://www.bilibili.com/video/BV1HT4y1K7DY?p=3
上一讲:00 - 百钱百鸡师兄们的反馈还不错,知道主动来猜黑板了!
哈哈哈,真好,这都是小师妹给大家源源不断的录视频的动力来源!
请保持住这个好习惯哦~
任何能帮助小师妹进步的建议,欢迎在下方积极留言{:10_297:}
好啦,废话不多说,进入今天的主题,找女神手机号!
先有请今天的主人公:小由鱼阁下~
他一直暗恋同是计科专业的同班女神,无数次悉心热情的帮女神修改代码。
(教学需要剧情,请不要深究哈)
有一天,女神又来找小由鱼调程序,二话没说,放下电脑就走了。
小由鱼看到代码编辑器上写了一段注释:
'''
想和我出去约会吗?
请根据以下线索找出我手机号 1239098xxxx 的后 4 位,并在今晚 21:00 前短信告诉我集合地方~
##前两位数字相同
##后两位数字相同,但与前两位不同
## 4 位数字刚好是一个整数的平方
'''
看到这里,小由鱼心头小鹿乱撞!
想到女神那甜蜜的微笑,仿佛一股清凉的泉水从他心中流过。
喜悦和躁动涌进了他的心中,心仿佛荡 漾在春 水里。
那颗心乐得快要盛不下蜜糖般的喜悦!!
一看手表,还有 20min,既然如此,只能来撸代码了!
按照女神的要求,其实就是找到一个前两位数相同、后两位数相同且相互间又不同的 4 位整数。
然后判断该整数是否是另一个整数的平方!
即求一个 4 位数 abcd,满足下面的条件( abcd 均属于):
其中由注释可知,a 和 b,c 和 d,又各自相等。
公示有了,最简单粗暴方式还是用穷举法,一个一个试,答案很快就会浮出水面!
(OS:不懂穷举法的请看上集:03:38)
小由鱼此时心中想起一句名言:
做好流程图,程序立刻出~
首先设计双层循环穷举出所有由前两位数和后两位数组成的四位数。
然后在最内层穷举出所有平方后结果为四位的数,最后判断该数是否符合总条件,符合则打印答案。
流程图参上:
**** Hidden Message *****
写流程图时小由鱼发现找整数时,不一定从1开始,因为女神手机号只能是四位!
00xx,这样根本无法满足条件。
既然如此是四位数,那么它的平方根只能是从 34 到 99 之间!
如果用上一讲的 while 循环来写,代码就是:
i = 1
while i <= 9:
j = 0
while j <= 9:
if(i != j):
k = 1000*i+100*i+10*j+j
t = 34
while t <= 99:
if(k == t*t):
print(k)
t += 1
j += 1
i += 1
while 循环我们都用了这么久,还可以用更省心的 for 循环噢!
将上面的 while 条件以及 +1 条件,统一用 for () in range()替换。
所以流程图中所有 while 都可以修改 ,并且最后的 for 循环条件就是(34,99):
for t in range(34, 100)
代码分分钟搞定了,看下结果:
抬手看表,刚刚 20:50,赶紧发短信:
女神我们晚上去.........
哈哈哈,让我们祝小由鱼幸福吧~~
源码(程序那么简单,自己写!): import math
for x in range(1, 10):
for y in range(10):
if x != y:
num = x * 1000 + x * 100 + y * 10 + y
if math.sqrt(num) % 1 == 0:
print(num) 有socket和socketserver的内容吗 …… {:5_95:} 看看 {:10_249:}{:10_249:} for x in range(10):
for y in range(10):
for z in range(32,100):
k = int(f'{x}{x}{y}{y}')
if x != y and z * z == k:
print('号码后四位是', k) for i in range(32,99):
num = pow(i,2)
if num%10==int(num%100/10) and int(num/1000)==int(num/100)%10 and (num%10)!=int(num/1000):
print(num) for i in range(1,10):
for j in range(1,10):
if i != j and pow(i*1000+i*100+j*10+j, 0.5)%1==0:
print(i,i,j,j) 学习一下 分析了一下,末位2位一致的完全平方数,末位只能是44,然后尾数为44只能是个位数和十位数造成。
所以,数学大佬肯定当场就口算出了答案,7744
而我们则是要靠计算机找规律。
{:5_90:} hhhhhhhhhhhhhhhhhhhhhhhhhhhh #include<stdio.h>//c语言实现
int main(){
int i,j,k,num;
for(i=1; i<10; i++){
for(j=0; j<10; j++){
if(i!=j){
num=i*1000+i*100+j*10+j;
for(k=1; k<100; k++){
if(k*k==num){
printf("phone number is %d",num);
}
}
}
}
}
return 0;
} '''手机号后四位'''
for a in range(10):
for c in range(10):
c != a
for x in range(32,100):
n = 1000*a + 100*a + 10*c + c
if n == x*x:
print(n)
for i in range(1,10):
for j in range (1,10):
if i!=j:
k=1100*i+11*j
for t in range(34,100):
if k==t*t:
num=k
print("女神的号码后四位为:",k)
import math
isPerfectSquare = lambda n: True if int(math.sqrt(n) + 0.5)**2 == n else False
女神电话号码:12390987744 1 啊