MaxChan 发表于 2017-11-25 10:04:49

本帖最后由 MaxChan 于 2017-11-25 10:06 编辑

for i in range(3163,10000):
      N=i**2
      a=*8
      for j in range(8):
            a=(N//(10**j))%10
      if len(list(set(a))) == 8:
            if (a+a+a+a==a+a+a+a):
                  print(N)


## sqrt(1e7)=3163,sqrt(1e8)=10000



===
10673289
13498276
19847025
20738916
32970564
57108249
68973025
86397025



不知道对不对?

Bill888 发表于 2017-11-25 15:56:19

num1 = 3163
num2 = num1 * num1
result = []
while 3163 <= num1 <= 10000:
    sum1 = 0
    sum2 = 0
    num3 = []
    for i in range(9):
      num4 = num2 % 10
      if i % 2 == 1:
            sum1 += num4
      else:
            sum2 += num4
      num3.append(num4)
      num2 //= 10
    if sum1 != sum2:
      num1 += 1
      num2 = num1 * num1
      continue
    tip = 0
    j = 0
    while j < 7:
      k = 1
      while j + k <= 7:
            if num3 == num3:
                tip = 1
                break
            k += 1
      if j + k <= 7:
            break
      j += 1
    if tip == 0:
      result.append(num1 * num1)
    num1 += 1
    num2 = num1 * num1
print(result)

weepingbaoebi 发表于 2017-11-25 16:14:20

.

铁棍阿童木 发表于 2017-11-25 21:34:00

import math as m


for num in range(10000000, 20000000):

    x = list(str(num))
   
    a = int(x) + int(x) + int(x) + int(x)
    b = int(x) + int(x) + int(x) + int(x)
   
    if a == b:
      if int(m.sqrt(num)) ** 2 == num:
            print(num)

我这个代码肯定有问题,虽然能运行,但是速度慢。不知道为什么!而且这样的8位数好多啊!我这还只是1千万到2千万之间的数。

wyp02033 发表于 2017-11-26 17:39:46

本帖最后由 wyp02033 于 2017-11-26 17:42 编辑

import math

def fun():
    start = int(math.sqrt(10000000)) + 1
    end = int(math.sqrt(100000000))
    result = []
    for i in range(start, end):
      num = i ** 2
      num_str = str(num)
      if len(num_str) == len(set(num_str)):
            sum_of_odd_position = 0
            sum_of_even_position = 0
            for each in num_str[::2]:
                sum_of_odd_position += int(each)
            for each in num_str:
                sum_of_even_position += int(each)
            if sum_of_even_position == sum_of_odd_position:
                result.append(num)
    return result

print(fun())

蓝色王魂 发表于 2017-11-26 19:58:52

for i in range(int(10**3.5)+1, 10**4):
        num = i**2
        each_digits =
        if each_digits + each_digits + each_digits + each_digits ==\
           each_digits + each_digits + each_digits + each_digits:
                print(num)

lebroncm 发表于 2017-11-27 11:29:21

for each in range(10000000,100000000):
    if len(list(str(each))) == len(set(str(each))):
      a = str(each)

      if int(a)+int(a)+int(a)+int(a)==int(a)+int(a)+int(a)+int(a):
   
            b=int(a) ** 0.5
            if b == int(b):
                  print(each)

shigure_takimi 发表于 2017-11-27 11:44:01

楼主,小生到底作对了没有呀?什么时候公布答案。

口可口可 发表于 2017-11-27 14:23:58

本帖最后由 口可口可 于 2017-11-27 14:29 编辑

def calc(digit):
    if digit % 2 == 0:# 位数必须是偶数
      result = []
      for num in range(10**(digit-1), 10**digit):
            tmp = num**0.5   # 先判断平方根是否整数
            if tmp//1 == tmp:
                str_num = str(num)
                for i in str_num:    # 判断是否每个数字均不同
                  if str_num.count(i) > 1:
                        break
                else:   # 判断奇数位和偶数位的和相同
                  if sum() for i in range(0, digit-1, 2)]) == \
                            sum() for i in range(1, digit, 2)]):
                        result.append(num)
      return result


print(calc(8))



nononoyes 发表于 2017-11-27 16:34:31

本帖最后由 nononoyes 于 2017-11-27 17:06 编辑

#通过列表判断奇数位是否和偶数位的和相等
def ifSame(rslt):
    oddsum=0
    evensum=0
    for i in range(0,8):
      if(i%2==0):
            oddsum = oddsum+rslt
      else:
            evensum = evensum+rslt
    if(oddsum==evensum):
      return True
    else:
      return False
#将数字转化为列表   
defintToList(n):
    rslt=[]
    for i in str(n):
      rslt.append(int(i))
    return rslt
   
#判断这个数是否为完全平方数:
def isPerfectSquareNumber(num):
    a = math.sqrt(num)
    a =
    if(isinstance(a,int)):
      return True
    else:
      return False
         
#判断是否有重复元素:
def ifDuplicateElement(num):
    rslt = intToList(num)
    for i in rslt:
      if rslt.count(i)>1:
            return False
            break
    else:
      return True   

def getNum127(a,b):
    resultSets=[]
    for i in range(a,b):
      #判断是否是完全平方数
      if(isPerfectSquareNumber(i)):
            #判断是否奇数位之和等于偶数位之和
            if(ifSame(intToList(i))):
                #判断是否有重复元素
                if(ifDuplicateElement(i)):
                  resultSets.append(i)
    return resultSets
   

      
if__name__ == "__main__":

    results = getNum127(10000000,100000000)
    print(results)

结果为:

nononoyes 发表于 2017-11-27 17:01:01

ocuult 发表于 2017-11-27 17:10:07

本帖最后由 ocuult 于 2017-11-28 10:23 编辑

import math
import time

start_time = time.time()# 记录开始时间
k = 1# 计数
for j in range(int(math.sqrt(10000000)), int(math.sqrt(100000000))):
    i = j * j
    num = str(i)
    if 100000000 > i > 10000000:
      if int(num) + int(num) + int(num) + int(num) == int(num) + int(num) + int(num) + int(
                num):
            if len(set(num)) == 8:
                print('第{}个数是:{},它的平方根是{}'.format(k, i, j))
                k += 1
end_time = time.time()# 记录程序结束时间

print("耗时:{0:.5f}秒".format(end_time - start_time))# 耗时

====================================================================
第1个数是:10673289,它的平方根是3267
第2个数是:13498276,它的平方根是3674
第3个数是:19847025,它的平方根是4455
第4个数是:20738916,它的平方根是4554
第5个数是:32970564,它的平方根是5742
第6个数是:57108249,它的平方根是7557
第7个数是:68973025,它的平方根是8305
第8个数是:86397025,它的平方根是9295
耗时:0.01901秒

foxiangzun 发表于 2017-11-28 17:34:16

#coding=utf-8

x = 0
for a in range(1, 10) :
      for b in range(0, 10) :
                for c in range(0, 10) :
                        for d in range(0, 10) :
                              for e in range(0, 10) :
                                        for f in range(0, 10) :
                                                for g in range(0, 10) :
                                                      for h in 0, 1, 4, 5, 6, 9 :
                                                                x = a * 10000000 + b * 1000000 + c * 100000 + d * 10000 + e * 1000 + f * 100 + g * 10 + h
                                                                if (a != b and b != c and c != d and d != e and e != f and f != g and g != h and h != a) :
                                                                        if (a + c + e + g == b + d + f + h) :
                                                                              if (str(x ** 0.5).isdigit() == 1) :
                                                                                        print(x)

tianalng233 发表于 2017-11-28 23:25:22

for i in range(3163, 10001):
        num = i ** 2
        result = num
        #通过地板除法和取余获得各位数
        num_list = []
        while num:
                num_list.append(num % 10)
                num = num // 10
        org = 0 #检测各位数字是否相等
        for each in num_list:
                if (num_list.count(each) != 1):
                        org = 1
        if org == 0:
                a1 = num_list + num_list + num_list + num_list
                a2 = num_list + num_list + num_list + num_list
                if a1 == a2:
                        print(result)

10673289
13498276
19847025
20738916
32970564
57108249
68973025
86397025

776667 发表于 2017-12-11 11:39:43

from itertools import *

for i in permutations(,8):
    if not i:
      continue
    if sum(,i,i,i]) == sum(,i,i,i]) and (int(''.join()))**0.5 == int((int(''.join()))**0.5):
      print(''.join())

SylarPu 发表于 2017-12-11 13:19:12

感觉需要考虑一下。

PYTHON90小菜鸟 发表于 2017-12-29 09:16:33

number=3612    #3162的平方为10000000
count=0
temp_0=0
temp_1=0

while number<10000:    #当number>10000时超过八位数
    count=number*number
    if len(set(str(count)))==len(str(count)):
      temps=list(str(count))
      for i in range(4):
            temp_0+=int(temps)
            temp_1+=int(temps)
      if temp_0==temp_1:
            print(number,'\t',count)
    number+=1

graceasyi 发表于 2018-1-17 16:22:15

一次只能输出一个符合条件的正整数,这样的正整数应该挺多的,不知道是否能全部输出?

import cmath
import random

while(True):
    l1 = random.sample(range(0, 10), 8)
    if l1 + l1 + l1 + l1 == l1 + l1 + l1 + l1:
      d = int(''.join())          # 把列表转换成数字
      if cmath.sqrt(d).real.is_integer():
            print("符合条件的正整数:" + str(d))
            break

结果:符合条件的正整数:86397025

graceasyi 发表于 2018-1-17 16:31:32

ocuult 发表于 2017-11-27 17:10
====================================================================
第1个数是:10673289,它的平 ...

if len(set(num)) == 8:受教了,一直在纠结怎么判断数字不重复,这个方法好!

保登心爱 发表于 2018-1-17 18:21:54

import time
start_time = time.time()

# 从1开始数平方数 平方值到9位数封顶
square_list = list()   # 就是保存到这
temp = 1
while True:
    temp_square = temp*temp
    if temp_square < 100000000:   # 9位数
      square_list.append((temp,temp_square))
      temp += 1
    else:
      break


num = 10000000         # 8位数
while num < 100000000:   # 9位数
    num += 1   
    num_str = str(num)
    for i in num_str:   # 每位数出现次数大于1就跳下一次循环
      if num_str.count(i) > 1:
            break       # break就不会执行 else
    else:
      odd = 0
      even = 0
      for i in range(8):
            if i%2 == 0:
                even += int(str(num))
            else:
                odd += int(str(num))
               
      # 如果奇位数之和等于 偶位数之和
      # 判断num是否在平方集合里
      if odd == even:
            for i in square_list:
                if i == num:
                  print (i, num, odd, even, )
print ('程序结束 耗时%.2fs' % (time.time() - start_time))


3267 10673289 18 18
3674 13498276 20 20
4455 19847025 18 18
4554 20738916 18 18
5742 32970564 18 18
7557 57108249 18 18
8305 68973025 20 20
9295 86397025 20 20
程序结束 耗时183.77s
页: 1 [2] 3
查看完整版本: Python:每日一题 127