发表于 2018-3-27 16:23:54

<url>http://canadianpharmaciesrxbest.com/|pharmacy online</url>, <url>http://canadianonlinepharmacygen.com/|canadian drugstore online</url>, <url>http://canadianpharmaciesdiscount.com/|discount pharmacy</url>, <url>http://canadianpharmacieslink.com/|ed meds online</url>

refracted_ray 发表于 2018-4-14 20:51:58

题目中的1000位数字怎么复制进代码啊,不让复制啊

refracted_ray 发表于 2018-4-14 21:12:30

a=7316717653 # 10位数
a_s=str(a) # 转换为字符串
a_list=list(a_s) # 转换为列表
b=[] # a_list的每个项转换为数值的列表
for i in a_list:
        j=int(i)
        b.append(j)

c=[] # 存储m以及对应的b
for k in range(2,10):
        m=b*b*b
        c.append((m,k))
c.sort(reverse=True) # 以m的大小为准,从大到小排列

"""
c=m,c=k
"""
print ('%d=%d*%d*%d'%(c,b],b-1],b-2]))

1000位数和10位数无本质区别,这里为了方便,只取本题1000位数的前10位,求连续3个数乘积的最大值

结果是210=7*6*5

塔利班 发表于 2018-8-24 10:48:19

b="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"

index=0
m=0
for i in range(989):
    c=b
    if '0' in c:
      continue
    t=eval('*'.join(list(c)))
    if t>m:
      m=t
      index=i

print('目标字符串',m,':最大结果',b)

山有扶苏啊 发表于 2018-10-13 11:52:19

def find_max(x):
    i = 0
    result = []
    while i <= len(str(x)) - 13:
      s = 1
      for t in str(x):
            s = s * int(t)
      i += 1
      result.append(s)
    print(max(result))

find_max(7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450)
            

答案是23514624000
做之前试了一下采集的数据数量,看来数学不大好

cupbbboom 发表于 2018-11-30 10:42:00

# 实现求一个1000位数字组成的数中
# 连续13位数乘积最大的序列及其乘积

str_a = '''
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
'''
import re
str_a = re.sub('\n','',str_a)
result =[]
x = 0
while x < len(str_a) - 11:
        l = str_a
        y = 0
       
        if '0' not in l:# 跳过包含0的
                z = 1
                while y < len(l):
                        z *= int(l)
                        y += 1
                result.append(z)
        x += 1
print(max(result))
23514624000

愿你 发表于 2019-3-14 20:38:06

#include <stdio.h>
typedef unsigned long longull;
main()
{
        char a={"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};
        ull max,i,j,t;
        j=0,max=0;
        for(i=0;i<987;i++)
        {
                t=1;
                j=0;
                while(j<13)
                {
                        t=t*(a-48);
                        j++;
                }
                if(t>max)
                {
                        max=t;
                }
        }
        printf("%ull", max);
}


不知道为什么我答案算错了{:10_266:}{:10_250:}

王小召 发表于 2019-4-10 14:30:28

本帖最后由 王小召 于 2019-4-10 14:32 编辑

运行结果:('5576689664895', 23514624000)

static/image/hrline/line4.png


def get_max(tar):
    slice_str = []
    str_val = []
    str_range = len(tar)

    for i in range(str_range):
      if i <= str_range - 13 and "0" not in str_t:
            result = 0
            for x in range(2, 10):
                result += (str_t.count(str(x)))*x
            slice_str.append(str_t)
            str_val.append(result)
    target = slice_str
    result = 1
    for each in target:
      result *= int(each)

    return target, result

str_t = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843" \
      "8586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557" \
      "6689664895044524452316173185640309871112172238311362229893423380308135336276614282806444486645238749" \
      "3035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776" \
      "6572733300105336788122023542180975125454059475224352584907711670556013604839586446706324415722155397" \
      "5369781797784617406495514929086256932197846862248283972241375657056057490261407972968652414535100474" \
      "8216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586" \
      "1786645835912456652947654568284891288314260769004224219022671055626321111109370544217506941658960408" \
      "0719840385096245544436298123098787992724428490918884580156166097919133875499200524063689912560717606" \
      "0588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"

print(get_max(str_t))


永恒的蓝色梦想 发表于 2019-8-3 11:10:30

本帖最后由 永恒的蓝色梦想 于 2020-8-2 19:17 编辑

Pythonfrom math import prod
num = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
print(max(prod(map(int, num)) for i in range(13, len(num))))

1666194196 发表于 2019-10-9 18:54:09

#include <stdio.h>
void main(){
        //73167176531330624919225119674426574742355349194934
        //96983520312774506326239578318016984801869478851843
        //85861560789112949495459501737958331952853208805511
        //12540698747158523863050715693290963295227443043557
        //66896648950445244523161731856403098711121722383113
        //62229893423380308135336276614282806444486645238749
        //30358907296290491560440772390713810515859307960866
        //70172427121883998797908792274921901699720888093776
        //65727333001053367881220235421809751254540594752243
        //52584907711670556013604839586446706324415722155397
        //53697817977846174064955149290862569321978468622482
        //83972241375657056057490261407972968652414535100474
        //82166370484403199890008895243450658541227588666881
        //16427171479924442928230863465674813919123162824586
        //17866458359124566529476545682848912883142607690042
        //24219022671055626321111109370544217506941658960408
        //07198403850962455444362981230987879927244284909188
        //84580156166097919133875499200524063689912560717606
        //05886116467109405077541002256983155200055935729725
        //71636269561882670428252483600823257530420752963450
        //在这个 1000位正整数中,连续4个数字的最大乘积是 9 × 9 × 8 × 9 = 5832。
        //找出这个 1000位正整数中乘积最大的连续13个数字。它们的乘积是多少?
       
        char a[]={"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};
        int i;
        long long max=0;
        for(i=0;i<1000;i++){
                int j;
                long long chengji = 1;
               
                if(i<=987){//i<=987j<987+13
                        for(j=i;j<13+i;j++){ //j:0-3 1-4 2-5...996-999
                                chengji*=a-48;//四个数一组的乘积 (数组定义的是 char类型 里面的数是字符 字符 0的 ASCII码值-48=0...)
                        }
                        if(chengji>max){//比较找出乘积最大的值
                                max=chengji;
                        }
                }
        }
        printf("max=%lld\n",max);
}

foxiangzun 发表于 2019-11-5 19:47:41

首先,这么长的一段数字里,有 0
其次,将这个数字阵列以 13 个为一个单位来切割,分配到不同的列表中
最后,在列表中没有 0 的前提下,相加的最大值就是相乘的最大值

有了以上三条思路,那么接下来就方便多了,代码如下:


numStr = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
list1 = []
numDict = {}
for i in range(987) :
      list1 = )]
      if 0 not in list1 :
                numDict = list1
sorted(numDict)
print(max(numDict), numDict)


最终运行起来,只花费 0.0135s,结果是:85

永恒的蓝色梦想 发表于 2020-5-2 16:26:56

foxiangzun 发表于 2019-11-5 19:47
首先,这么长的一段数字里,有 0
其次,将这个数字阵列以 13 个为一个单位来切割,分配到不同的列表中
最 ...

最后,在列表中没有 0 的前提下,相加的最大值就是相乘的最大值所以你错了

foxiangzun 发表于 2020-5-3 09:26:53

永恒的蓝色梦想 发表于 2020-5-2 16:26
所以你错了

确实错了。。1 在这个序列中,也会拉低最终的乘积值,所以 1 也不能在里面。。修改后的代码如下:

numStr = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
list1 = []
numDict = {}
for i in range(987) :
      list1 = )]
      if 0 not in list1 and 1 not in list1 :
                numDict = list1
sorted(numDict)
print(max(numDict), numDict)
flag = 1
for i in numDict :
    flag *= i
print(flag)

永恒的蓝色梦想 发表于 2020-5-3 09:41:19

foxiangzun 发表于 2020-5-3 09:26
确实错了。。1 在这个序列中,也会拉低最终的乘积值,所以 1 也不能在里面。。修改后的代码如下:

根本就不是这么回事,3和8,5和5 ,哪对和大?哪对积大?你的思路本身就是错误的

foxiangzun 发表于 2020-5-3 21:47:27

永恒的蓝色梦想 发表于 2020-5-3 09:41
根本就不是这么回事,3和8,5和5 ,哪对和大?哪对积大?你的思路本身就是错误的

所以这里必须全部剖成 13 个一组的数,然后算出它们的乘积,最后再来比较结果么。。感觉这样好费内存的说{:5_100:}

永恒的蓝色梦想 发表于 2020-5-3 22:04:31

foxiangzun 发表于 2020-5-3 21:47
所以这里必须全部剖成 13 个一组的数,然后算出它们的乘积,最后再来比较结果么。。感觉这样好费内存的说 ...

是的。
可能你对内存没什么概念,这点内存啥也算不上

leon0149 发表于 2020-5-8 23:07:01

max = 23514624000
0.000 s#include <stdio.h>
#include <time.h>

long long mul = 1;

int ToString(char num){
    int n = ((int)num) - 48;
    return n;
}

int main(void)
{
    clock_t start, finish;
    double duration;
    char num = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
    int n;
    long long max = 0;

    start = clock();
    for (int j = 0;j < 1000 - 13;) {
      for (int i = j; i < j + 13; ++i) {
            if (num != '0') {
                n = ToString(num);
                mul = mul * n;
            }
            else {
                j = i + 1;
                goto here;
            }
      }
      max = max > mul ? max : mul;

      mul = 1;
      j ++;
      continue;
      here:
      mul = 1;
    }
    finish = clock();

    printf("max = %lld\n", max);
    duration = (double )(finish - start) / CLOCKS_PER_SEC;
    printf("%.3f s", duration);
    return 0;
}

yhhpf 发表于 2020-8-24 15:03:57

num = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
num1 = []
for i in range(len(num) - 12):
    value = 1
    for a in range(13):
      value *= int(num)
    num1.append(value)
print(max(num1))
快是很快...但,感觉解法太简单了0 0?

4444567 发表于 2020-9-2 23:35:47

sn='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
list1 = []
dict1 = {}
for i in range(0,989):
    k = 1
    for n in sn:
      if int(n) == 0:
            break
      else:
            k = k * int(n)
   
    list1.append(k)
    dict1 = k
   
def get_value(i,k):#根据字典的值来查找键
    for i,k in dict1.items():
      if k == max(list1):
            print('所求数中连续的13位数字是:%s' % sn)

get_value(i,k)
print('最大乘积为:%s' % max(list1))
   

有马_冬巳 发表于 2020-10-4 10:50:50

'''找出以下这个 1000 位的整数中连续 13 个数字的最大乘积。'''

Renum = "73167176531330624919225119674426574742355349194934"\
      "96983520312774506326239578318016984801869478851843"\
      "85861560789112949495459501737958331952853208805511"\
      "12540698747158523863050715693290963295227443043557"\
      "66896648950445244523161731856403098711121722383113"\
      "62229893423380308135336276614282806444486645238749"\
      "30358907296290491560440772390713810515859307960866"\
      "70172427121883998797908792274921901699720888093776"\
      "65727333001053367881220235421809751254540594752243"\
      "52584907711670556013604839586446706324415722155397"\
      "53697817977846174064955149290862569321978468622482"\
      "83972241375657056057490261407972968652414535100474"\
      "82166370484403199890008895243450658541227588666881"\
      "16427171479924442928230863465674813919123162824586"\
      "17866458359124566529476545682848912883142607690042"\
      "24219022671055626321111109370544217506941658960408"\
      "07198403850962455444362981230987879927244284909188"\
      "84580156166097919133875499200524063689912560717606"\
      "05886116467109405077541002256983155200055935729725"\
      "71636269561882670428252483600823257530420752963450"

def maxproduct(chain_num):
    start_position=0
    end_position=chain_num
    max_product = 0
    while end_position <= len(Renum)-1:
      product = 1
      for i in range(start_position, end_position):
            product *= int(Renum)
      if product > max_product:
            max_product = product
            num_chain = []
            for j in range(start_position,end_position):
                num_chain.append(Renum)
      start_position += 1
      end_position += 1
    print("这1000位数中连续%d个数字的最大乘积为%d" %(chain_num,max_product))
    print("这13个数字是:")
    print(num_chain)

start_maxproduct = time.time()
maxproduct(13)
time_maxproduct = time.time() - start_maxproduct
print("%f秒" %time_maxproduct)


这1000位数中连续13个数字的最大乘积为23514624000
这13个数字是:
['5', '5', '7', '6', '6', '8', '9', '6', '6', '4', '8', '9', '5']
0.002976秒
页: 1 2 [3] 4
查看完整版本: 题目8:找出这个1000位数字中连续13个数字乘积的最大值