鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: ooxx7788

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

[复制链接]
发表于 2018-12-4 19:54:07 | 显示全部楼层
import random as r

# 随机生成n个整数
def createNums(num_l,n):
    for i in range(n):
        num = r.randint(2,50)
        num_l.append(num)
    return num_l

# 循环一次后的结果
def circu(num_l):
    length = len(num_l)   
    a = num_l[0]
    for i in range(length-1):   
        num_l[i] += num_l[i+1]
        if num_l[i] > 100:
            num_l[i] %= 100
    num_l[-1] += a            
    if num_l[-1] > 100:
        num_l[-1] %= 100
    return num_l

# 循环k次后的结果
def circulation(num_l,k):   
    for i in range(k):
        circu(num_l)
    return num_l


num_list = []
n = int(input("请输入要生成整数的个数(2<=n<=50): "))
k = int(input("请输入要循环的次数(1<=k<=20000000): "))
createNums(num_list,n)
print(num_list)
circulation(num_list,k)
print(num_list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-4 13:39:41 | 显示全部楼层
import random
import time


def make_arr(n):
    arr = []
    for i in range(n):
        arr.append(random.randint(0, 99))

    return arr


def magic(n, k):
    # arr = [1, 2, 3, 4, 5]
    arr = make_arr(n)
    print(arr)
    for i in range(k):
        # print(arr)
        temp = arr[0]
        for j in range(n - 1):
            arr[j] = (arr[j] + arr[j + 1]) % 100
        arr[n - 1] = (arr[n - 1] + temp) % 100

    return arr


begin = time.time()
arr = magic(50, 20000000)
print(arr)
print(time.time() - begin)


结果为:
[77, 95, 87, 16, 65, 34, 33, 22, 11, 77, 39, 96, 41, 9, 30, 70, 53, 90, 91, 58, 92, 70, 87, 88, 87, 20, 10, 27, 44, 90, 12, 74, 12, 51, 42, 55, 72, 39, 55, 54, 58, 68, 35, 31, 12, 64, 71, 96, 49, 61]
[86, 40, 7, 30, 15, 23, 16, 92, 81, 97, 72, 84, 65, 7, 17, 64, 73, 75, 61, 60, 28, 8, 4, 31, 74, 11, 90, 7, 5, 40, 48, 91, 67, 56, 72, 22, 34, 65, 82, 67, 89, 48, 50, 36, 10, 53, 33, 79, 81, 74]
99.58436131477356

不知道程序有没有哪里不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-16 10:08:35 | 显示全部楼层
import random as rd
molihuan=[]
len_num=int(input("请输入一个正整数作为魔力环序列:"))
for i in range(len_num):
    molihuan.append(int(rd.uniform(2,50)))

print(molihuan)
for i in range(20000000):
    for j in range(len_num-1):
        molihuan[j]+=molihuan[j+1]
        if molihuan[j]>100:
            molihuan[j]=molihuan[j]%100
    molihuan[-1]+=molihuan[0]
    if molihuan[-1]>100:
        molihuan[-1]=molihuan[-1]%100
    if i % 500000 ==0:
        print(i)
print(molihuan)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-16 10:14:31 | 显示全部楼层
ooxx7788 发表于 2017-3-26 18:59
其实基本的算法我也弄出来了,但是不能满足2000万次的需求。
各位不妨试试看n=50,k=20000000,能不能算。

我的版本这个程序跑起来是2分半
import random as rd
molihuan=[]
len_num=int(input("请输入一个正整数作为魔力环序列:"))
for i in range(len_num):
    molihuan.append(int(rd.uniform(2,50)))

print(molihuan)
for i in range(20000000):
    for j in range(len_num-1):
        molihuan[j]+=molihuan[j+1]
        if molihuan[j]>100:
            molihuan[j]=molihuan[j]%100
    molihuan[-1]+=molihuan[0]
    if molihuan[-1]>100:
        molihuan[-1]=molihuan[-1]%100
    if i % 500000 ==0:
        print(i)
print(molihuan)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-18 21:09:39 From FishC Mobile | 显示全部楼层
jerryxjr1220 发表于 2017-3-26 19:35
题目本身没难度,只是当n=50, k=20000000的时候,运算慢了一些,不过也还行,就几分钟
举例,当n ...

大哥,我想问一下你代码中的self.rings[j]+=self.ring[j+1]不是会有溢出的可能吗,但问什么代码不会报错呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-27 21:06:46 | 显示全部楼层
速度很慢

import random
l = [random.randint(0, 99) for i in range(50)]
k = int(input('请输入循环次数:'))
print(l)

for i in range(k):
    temp = l[0]
    for j in range(len(l)):
        if j == len(l) - 1:
            l[j] = l[j] + temp
        else:
            l[j] = l[j] + l[j+1]
        if l[j] >= 100:
            l[j] = l[j] % 100
print(l)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-11 23:43:58 | 显示全部楼层
交作业!
n = int(input("请输入手环数字n(2-50之间):"))
k = int(input("循环次数k(1-20000000之间):"))
str1 = input('请输入{}个0-9的整数(以逗号“,”分隔)'.format(n))
list1 = [int(each) for each in str1.split(",")]                     #将输入n个数转化为列表
count = 0                                                           #计数器初始化
print("第{}次变化后的数列{}".format(count, list1))                   #打印初始值
while count < k:
    for i in range(n):
        if count == k:                                              #增加断点检测,防止计数器超出设定
            break
        else:
            count += 1
            if i < n-1:                                             #第1到n-1个数字变换
                if list1[i] + list1[i+1] <= 100:                    #超过100取模
                    list1[i] += list1[i+1]
                else:
                    list1[i] = (list1[i] + list1[i+1]) % 100
                print("第{}次变化后的数列{},正在变换第{}个数".format(count, list1,i+1))
            else:
                if list1[i] + list1[0] <= 100:                      #第n个数字变换
                    list1[i] += list1[0]
                else:
                    list1[i] = (list1[i] + list1[0]) % 100
                print("第{}次变化后的数列{},正在变换第{}个数".format(count, list1,i+1))
print("变换第{}次的数值为:{}".format(k, list1[i]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 20:16:05 | 显示全部楼层
~~
import datetime as dt

class Band:
          def __init__(self,n,k):
                    self.n = n
                    self.dic={}
                    for  i in range(1,n+1):
                              self.dic[i] = i
                    t = k-1
                    while t:
                              self.newdic()
                              t -=1
                    self.last_dic = self.newdic()
                    last_list = []
                    for a in self.last_dic:
                              last_list.append(str(self.last_dic[a]))
                    print(last_list)
          def newdic(self):
                    dic1 = {}
                    for i in self.dic:
                              dic1[i] = self.dic[i]
                    for a in self.dic:
                              if a == len(self.dic):
                                        self.dic[a] = dic1[a] + dic1[1]
                              else:
                                        self.dic[a] = dic1[a] + dic1[a+1]
                              if self.dic[a] >= 100:
                                        self.dic[a] = self.dic[a]%100
                    return self.dic
                    
                              
def main():
          t1 = dt.datetime.now()
          n = int(input('请输入n的个数:'))
          k = int(input('请输入循环次数:'))
          exp = Band(n,k)
          t2 = dt.datetime.now()
          temp = t2 - t1
          print(temp)
 
          

if __name__ == '__main__':
          
          main()
                                        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-25 22:46:48 | 显示全部楼层
本帖最后由 暮让 于 2019-9-25 22:49 编辑
import datetime
import random

n, k = input("请输入n 和 k:").split(' ')
n, k = int(n), int(k)
temp = int(input("请选择导入数据方式:\n1.系统随机\n2.手动输入\n请选择:"))
list1 = []
if temp == 1:
    for i in range(n):
        list1.append(random.randint(0, 99))
elif temp == 2:
    array = input("请输入%d个数字:" % n).split(' ')
    for i in array:
        list1.append(int(i))
print("您导入的数据为:", list1)
t1 = datetime.datetime.now()
for _ in range(k):
    a = list1[0]
    for i in range(n):
        if list1[i-1] > 100:
            list1[i-1] %= 100
        if i == len(list1) - 1:
            list1[i] += a
            if list1[i] > 100:
                list1[i] %= 100
            break
        list1[i] += list1[i+1]
t2 = datetime.datetime.now()
print(list1)
print(t2-t1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-26 08:52:20 | 显示全部楼层
import time
def fun13():
    Tstart = time.time()
    Lnew = []
    L = [0,1,2,3,4]
    Counttimes = int(input("please enter the number you want to count:"))
    for i in range(Counttimes):
        for j in range(len(L)):
            if(j==(len(L)-1)):
                Lnew.append(Lnew[0])
            else:
                Lnew.append(L[j]+L[j+1])
                if(Lnew[j]>100):
                    Lnew[j] = Lnew[j]%100
        L = []
        L = Lnew
        Lnew = []
        print(L,(time.time()-Tstart),i) #每次显示结果,时间,次数。2百万次大概需要750s.在shell下运行要慢很多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 10:10:24 | 显示全部楼层
n = int(input("请输入魔力手环有几个数字构成:"))
A = [int(input("魔力手环的数字:")) for i in range(n)]
def status(k):
    # 转了多少圈
    cir = k//n + 1
    # B = []
    # # 生成的新列表
    # for i in range(cir):
    #     B += A
    for i in range(k):
        # 转一次的状态
        # 用B来记录新的状态中的各数字
        B = []
        for j in range(len(A)):
            if j == 0:
                B.append((A[j]+A[-1])%100)
            else:
                B.append((A[j]+A[j-1])%100)
        # 更新A,将A中的元素变为转换之后的元素
        for m in range(len(B)):
            A[m] = B[m]
    return A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 17:14:00 | 显示全部楼层
print('----------每日练习题13----------')
#一个由n个数字构成的环,每次变化后,每个数字会变成自己和后面一个数的和,最后一个数的后面是第一个数。
#当数字大于100时,取模。
#给出这个手环开始的n个数字,循环次数k,循环后的数值。
#要求 2<=n<=50, 1<=k<=20000000;
#注意,一定使得运算可以满足以上n,k的要求(所以,不要认为一个小数字你可以算出来,大数字就一定能算的出来,尽量让计算在有限的时间内完成)。

import random as rd
import time as t

start = t.process_time()

n = int(input('Please input n:'))
k = int(input('Please input k:'))

list1 = []
for i in range(n):
    list1.append(rd.randint(0,99))
print(list1)

count = 0
while count != k:
    list2 = []
    for i in range(len(list1)-1):
        if list1[i] + list1[i+1] >= 100:
            list2.append((list1[i] + list1[i+1]) % 100)
        else:
            list2.append(list1[i] + list1[i+1])
    list2.append(list1[0])
    list1 = []
    list1 = list2
    #print(list2)
    count += 1

print(list2)

end = t.process_time()
t = end - start
print('Runtime is %f s:'%t)
----------每日练习题13----------
Please input n:50
Please input k:20000000
[54, 59, 54, 25, 56, 18, 32, 66, 63, 94, 90, 87, 29, 89, 67, 45, 14, 35, 78, 29, 44, 9, 54, 71, 13, 32, 48, 82, 83, 12, 31, 3, 65, 99, 52, 35, 77, 14, 95, 71, 99, 21, 62, 18, 73, 36, 34, 74, 25, 53]
[93, 6, 5, 14, 22, 94, 45, 90, 58, 69, 95, 65, 82, 27, 24, 16, 51, 89, 85, 97, 0, 29, 40, 45, 46, 73, 88, 49, 60, 21, 13, 41, 9, 24, 78, 10, 90, 79, 92, 92, 75, 12, 80, 65, 10, 52, 92, 59, 9, 3]
Runtime is 831.984375 s:

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

使用道具 举报

发表于 2020-3-8 17:09:26 | 显示全部楼层
a = []
n = int(input("你想让这个环有几个数字呢?"))
for i in range(0,n):
    k = int(input("请输入第"+str(i+1)+"个数字(输入的数字应该小于100)"))
    a.append(k)
k = int(input("你想让这个环循环几次呢?"))
for t in range(0,k):
    for i in range(0,n-1):
        if i==0:
            j = (a[0])%100
        a[i] = (a[i] + a[i+1])%100
    a[n-1] = (a[n-1] + j)%100
print(a)
print("运算完成!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 12:27:49 | 显示全部楼层
n = int(input("请输入一个从2到50范围的整数:"))
k = int(input("请输入一个从1到2000000000范围的整数:"))
temp = input("请输入n个数,n是您输入的第一个整数,数之间用空格隔开:")
magic_list = temp.split()

for i in range(n):
    magic_list[i] = int(magic_list[i])


i = 1
j = 0
while i <= k:
    p = magic_list[0]
    while j < n-1:
        magic_list[j] = magic_list[j] + magic_list[j+1]
        if magic_list[j] >= 100:
            magic_list[j] %= 100
        j += 1
    else:
        magic_list[j] = magic_list[j] + p
        if magic_list[j] >= 100:
            magic_list[j] %= 100
        p = magic_list[0]
        i += 1
        j = 0


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

使用道具 举报

发表于 2020-12-13 21:15:35 | 显示全部楼层
import random as r
cycle1=[]
times1=0
for num in range(r.randint(2, 50)):
    times1+=1
    cycle1.append(r.randint(0, 99))
print(cycle1)
K=r.randint(1,20000000)
print(K)
while K>0:
    location1=0
    cycle2=[]
    for num_2 in cycle1:
        if location1+1==len(cycle1):
            num_2=num_2+cycle1[0]
        else:
            num_2=num_2+cycle1[location1+1]
        location1+=1
        cycle2.append(num_2)
    K-=1
print(cycle2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 22:15:59 From FishC Mobile | 显示全部楼层
新人报到进来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-30 13:59:43 | 显示全部楼层
num = [int(i) for i in (input()).split(' ')]
num = [i for i in range(1,51)]
n = int(input())
def jisuan(num,n):
    for i in range(n):
        temp = num[0]
        for i in range(len(num)):
            try:
                num[i]+=num[i+1]
                if num[i] > 100:
                    num[i] =num[i] - 100
            except:
                num[i]+=temp
                if num[i] > 100:
                    num[i] =num[i] - 100
    return num



print(jisuan(num,n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 19:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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