鱼C-小师妹 发表于 2021-2-8 22:08:19

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,赶紧发短信:

女神我们晚上去.........
哈哈哈,让我们祝小由鱼幸福吧~~

源码(程序那么简单,自己写!):

yunmemory 发表于 2021-4-12 09:43:18

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)

Minecraft程序猿 发表于 2021-5-8 22:34:45

有socket和socketserver的内容吗

_2_ 发表于 2021-5-9 10:47:45

……

hornwong 发表于 2021-5-9 20:44:48

{:5_95:}

大蟒蛇643125 发表于 2021-5-10 17:57:28

看看

q1243231608 发表于 2021-6-10 09:06:22

{:10_249:}{:10_249:}

zhangyuesd 发表于 2021-6-21 11:05:03

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)

mzxmzx 发表于 2021-7-6 20:10:18

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)

mzxmzx 发表于 2021-7-6 20:11:26

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)

newdaxie 发表于 2021-7-18 08:35:17

学习一下

zttwm 发表于 2021-8-10 01:46:20

分析了一下,末位2位一致的完全平方数,末位只能是44,然后尾数为44只能是个位数和十位数造成。
所以,数学大佬肯定当场就口算出了答案,7744
而我们则是要靠计算机找规律。

天天今天要健身 发表于 2021-8-13 10:06:25

{:5_90:}

456987 发表于 2021-8-31 19:25:03

hhhhhhhhhhhhhhhhhhhhhhhhhhhh

456987 发表于 2021-8-31 20:01:20

#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;
}

一阵三十六 发表于 2021-9-2 18:36:31

'''手机号后四位'''
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)

兔飞飞 发表于 2021-9-12 15:57:42

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)

傻眼貓咪 发表于 2021-10-17 19:10:04

import math
isPerfectSquare = lambda n: True if int(math.sqrt(n) + 0.5)**2 == n else False
女神电话号码:12390987744

cccxx 发表于 2021-10-18 16:05:01

1

kcyyyy 发表于 2021-10-20 17:04:00

页: [1] 2 3
查看完整版本: 01 - 女神的手机号