鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 127

[复制链接]
发表于 2017-11-25 10:04:49 | 显示全部楼层
本帖最后由 MaxChan 于 2017-11-25 10:06 编辑

for i in range(3163,10000):
      N=i**2
      a=[0]*8
      for j in range(8):
            a[j]=(N//(10**j))%10
      if len(list(set(a))) == 8:
            if (a[0]+a[2]+a[4]+a[6]==a[1]+a[3]+a[5]+a[7]):
                  print(N)


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



===
10673289
13498276
19847025
20738916
32970564
57108249
68973025
86397025



不知道对不对?
]95WVYEG(VJX)ZGPG~D6%@C.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[j] == num3[j + k]:
                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)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-25 16:14:20 | 显示全部楼层
.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-25 21:34:00 | 显示全部楼层
import math as m


for num in range(10000000, 20000000):

    x = list(str(num))
    
    a = int(x[0]) + int(x[2]) + int(x[4]) + int(x[6])
    b = int(x[1]) + int(x[3]) + int(x[5]) + int(x[7])
    
    if a == b:
        if int(m.sqrt(num)) ** 2 == num:
            print(num)

我这个代码肯定有问题,虽然能运行,但是速度慢。不知道为什么!而且这样的8位数好多啊!我这还只是1千万到2千万之间的数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[1::2]:
                sum_of_even_position += int(each)
            if sum_of_even_position == sum_of_odd_position:
                result.append(num)
    return result

print(fun())
[10673289, 13498276, 19847025, 20738916, 32970564, 57108249, 68973025, 86397025]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 19:58:52 | 显示全部楼层
for i in range(int(10**3.5)+1, 10**4):
        num = i**2
        each_digits = [int(x) for x in list(str(num))]
        if each_digits[0] + each_digits[2] + each_digits[4] + each_digits[6] ==\
           each_digits[1] + each_digits[3] + each_digits[5] + each_digits[7]:
                print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0])+int(a[2])+int(a[4])+int(a[6])==int(a[1])+int(a[3])+int(a[5])+int(a[7]):
   
            b=int(a) ** 0.5
            if b == int(b):
                    print(each)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-27 11:44:01 | 显示全部楼层
楼主,小生到底作对了没有呀?什么时候公布答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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([int(str_num[i]) for i in range(0, digit-1, 2)]) == \
                            sum([int(str_num[i]) for i in range(1, digit, 2)]):
                        result.append(num)
        return result


print(calc(8))

[10673289, 13498276, 19847025, 20738916, 32970564, 57108249, 68973025, 86397025]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]
        else:
            evensum = evensum+rslt[i]  
    if(oddsum==evensum):
        return True
    else:
        return False
#将数字转化为列表   
def  intToList(n):
    rslt=[]
    for i in str(n):
        rslt.append(int(i))
    return rslt
   
#判断这个数是否为完全平方数:
def isPerfectSquareNumber(num):
    a = math.sqrt(num)
    a = [str(a),int(a)][int(a)==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)

结果为:
[10673289, 13498276, 19847025, 20738916, 32970564, 57108249, 68973025, 86397025]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-27 17:01:01 | 显示全部楼层
[10673289, 13498276, 19847025, 20738916, 32970564, 57108249, 68973025, 86397025]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0]) + int(num[2]) + int(num[4]) + int(num[6]) == int(num[1]) + int(num[3]) + int(num[5]) + int(
                num[7]):
            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秒

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[1] + num_list[3] + num_list[5] + num_list[7]
                a2 = num_list[0] + num_list[2] + num_list[4] + num_list[6]
                if a1 == a2:
                        print(result)

10673289
13498276
19847025
20738916
32970564
57108249
68973025
86397025
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 11:39:43 | 显示全部楼层
from itertools import *

for i in permutations([x for x in range(10)],8):
    if not i[0]:
        continue
    if sum([i[0],i[2],i[4],i[6]]) == sum([i[1],i[3],i[5],i[7]]) and (int(''.join([str(x) for x in i])))**0.5 == int((int(''.join([str(x) for x in i])))**0.5):
        print(''.join([str(x) for x in i]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 13:19:12 | 显示全部楼层
感觉需要考虑一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i])
            temp_1+=int(temps[i])
        if temp_0==temp_1:
            print(number,'\t',count)
    number+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 16:22:15 | 显示全部楼层
一次只能输出一个符合条件的正整数,这样的正整数应该挺多的,不知道是否能全部输出?
import cmath
import random

while(True):
    l1 = random.sample(range(0, 10), 8)
    if l1[0] + l1[2] + l1[4] + l1[6] == l1[1] + l1[3] + l1[5] + l1[7]:
        d = int(''.join([str(x) for x in l1]))          # 把列表转换成数字
        if cmath.sqrt(d).real.is_integer():
            print("符合条件的正整数:" + str(d))
            break

结果:符合条件的正整数:86397025
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 16:31:32 | 显示全部楼层
ocuult 发表于 2017-11-27 17:10
====================================================================
第1个数是:10673289,它的平 ...

if len(set(num)) == 8:  受教了,一直在纠结怎么判断数字不重复,这个方法好!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)[i])
            else:
                odd += int(str(num)[i])
                
        # 如果奇位数之和等于 偶位数之和
        # 判断num是否在平方集合里
        if odd == even:
            for i in square_list:
                if i[1] == num:
                    print (i[0], 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表