鱼C论坛

 找回密码
 立即注册
查看: 4141|回复: 17

[技术交流] 小练习:20160627 0,1,2,3,4,5,6,7,8,9的第100万个字典排列是什么

[复制链接]
发表于 2016-6-26 21:44:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2016-7-4 10:02 编辑

从现在开始我们要开展一批欧拉计划的习题练习。
其实在我们论坛中已有欧拉计划的板块,可能有些鱼油还没注意到。
什么是欧拉计划:http://bbs.fishc.com/thread-60405-1-1.html
我们欧拉板块现已给出了81道题,这批练习将从欧拉计划中选题。其实用python语言完成有很多的优势,可以更简洁更方便的实现。
如果大家有兴趣也可浏览欧拉的英文网站:https://projecteuler.net/archives
这里已经有了500余题,并且你每做对一题,就可以下载到参考答案的pdf文件,看看你的实现方法与参考答案有什么不同,以利于迅速提高自己的水平。


                               
登录/注册后可看大图

好了言归正传,我们开始做小练习。




题目要求:
以python语言完成,如果是python2请注明。
程序以代码文字格式发帖。
题目比较简单,注重程序效率和创意。
答题在一周内完成,即7.4 10:00之前,其后将公开大家的答案,并评比成绩。

另程序和答案可以在网上搜到,希望大家独立完成。


题目:

排列是一个物体的有序安排。例如 3124 是 1, 2, 3, 4 的一种排列。如果所有的排列按照数值或者字母序排序,我们称其为一个字典序。0, 1, 2 的字典排列有:

012   021   102   120   201   210

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是什么?


(即0~9的10位数从小到大的排列,可以使用itertools模块的permutations函数,但不用排列方法可以更快的得到答案,大家不妨一试)
本题将考察大家编程的效率,即用时情况。

奖励:
对所有完成程序并得出正确答案的将给予加分奖励,优秀的将额外加分。
在完成一批题目后,将根据每期的完成情况总评评出最佳,会有神秘大奖。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-6-26 21:46:48 | 显示全部楼层
我的程序如下:
就先不写注释了。大家可以看到程序优化后大幅度缩短了用时。
  1. #方法1
  2. import time, itertools
  3. tt = time.time()
  4. num = list(itertools.permutations(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 10))[1000000 - 1]
  5. print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:',''.join(num))
  6. print('方法1用时:%.4f s'%(time.time() - tt))

  7. #方法2
  8. import time, itertools
  9. tt = time.time()
  10. num = itertools.permutations(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 10)
  11. i = 1
  12. while i < 1000000:
  13.     next(num)
  14.     i += 1
  15. print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:',''.join(next(num)))
  16. print('方法2用时:%.4f s'%(time.time() - tt))

  17. #方法3
  18. import time, itertools, math
  19. tt = time.time()
  20. n = math.factorial(9)
  21. num = itertools.permutations(['0', '1', '3', '4', '5', '6', '7', '8', '9'], 9)
  22. i = 1
  23. while i < 1000000 - n * 2:
  24.     next(num)
  25.     i += 1
  26. print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:','2' + ''.join(next(num)))
  27. print('方法3用时:%.4f s'%(time.time() - tt))


  28. #方法4
  29. import time, math
  30. tt = time.time()
  31. n = [0 for x in range(10)]
  32. num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  33. number = 1000000 - 1
  34. for i in range(9):
  35.     f = math.factorial(9 - i)
  36.     n[i] = num[number // f]
  37.     num.pop(number // f)
  38.     number %= f
  39. n[9] = num[0]
  40. print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:',''.join(n))
  41. print('方法4用时:%.4f s'%(time.time() - tt))
复制代码

  1. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
  2. 方法1用时:1.3190 s
  3. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
  4. 方法2用时:0.4110 s
  5. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
  6. 方法3用时:0.2080 s
  7. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
  8. 方法4用时:0.0080 s
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-27 01:08:18 | 显示全部楼层
通过计算排列组合的情况,快速计算出排在第1000000位的数字
在i5-3210M上,计算10000次耗时0.7秒

  1. from math import factorial as fac
  2. from time import time

  3. goal,total_number = 1000000,10

  4. #to calculate the time to repeat 10000times
  5. t = time()
  6. for counter in range(10000):
  7.    
  8.     rest,num_set,result_l = goal,set(range(total_number)),list()
  9.     for i in range(1,total_number+1):
  10.         p = fac(total_number-i)
  11.         for j in range(len(num_set)):
  12.             if rest-(j+1)*p <= 0:
  13.                 result_l.append(sorted(num_set)[j])
  14.                 num_set.remove(result_l[-1])
  15.                 rest -= j*p
  16.                 break

  17. print('result:%s'%''.join(map(str,result_l)),"time:%.3f"%(time()-t))
复制代码

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-27 08:49:14 | 显示全部楼层
  1. def getComp(numList, n):
  2.     import math
  3.     numList = sorted(numList)
  4.     result = []
  5.     overn = 0
  6.     for i in range(0, len(numList)):
  7.         position = int(n/(math.factorial(len(numList)-1)))
  8.         if position == (n/(math.factorial(len(numList)-1))):
  9.             position -= 1
  10.         overn = position * math.factorial(len(numList)-1)
  11.         n -= overn
  12.         result.append(numList[position])        
  13.         del numList[position]
  14.     return result

  15. print(getComp([0,1,2,3,4,5,6,7,8,9], 1000000))
复制代码

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-27 12:06:23 | 显示全部楼层
本帖最后由 lizuolong 于 2016-6-27 14:08 编辑

  1. n=1000000-1
  2. seq = list('0123456789')
  3. idx = []
  4. ret = ''
  5. for d in range(1, len(seq)+1):
  6.     idx = [n%d] + idx
  7.     n //= d
  8. for i in idx:
  9.     ret += str(seq.pop(i))
  10. print(ret)
复制代码


答案:2783915460

还有一种思路,等下试试

这算法快很多

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-27 18:51:39 | 显示全部楼层
本帖最后由 Spicebush 于 2016-6-27 19:07 编辑
  1. #答案为2783915460
  2. def pl(n):
  3.     x = n
  4.     for i in range(1, n):
  5.         x *= i
  6.     return x
  7. num = 0
  8. ls = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
  9. m = pl(10) - 1000000
  10. for j in range(9):
  11.     y = m // pl(9-j)
  12.     m %= pl(9-j)
  13.     num = num*10 + ls.pop(y)
  14. num = num *10 + ls[0]
  15. print(num)
复制代码

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-28 23:17:55 | 显示全部楼层
  1. #这个函数用来创建一个数位的列表,列表中的元素分别为每增加一位数,其最大位每一个数字出现的次数。
  2. def sort_list(number):
  3.     list1 =[1]
  4.     x = 1
  5.     n = 2
  6.     while n <= number:
  7.         x *= n-1
  8.         n += 1
  9.         list1.append(x)
  10.     list1.reverse()
  11.     return list1

  12. #digit参数传入多少数位的字典排序,seat_num传入需要显示哪一个位置的字典排列。
  13. def seat(digit,seat_num):
  14.     s_list = sort_list(digit)
  15.     #print(s_list)#检查代码
  16.     num_list = list(range(digit))
  17.     #print(num_list)#检查代码
  18.     dict_strnum = ''
  19.     x = 0
  20.     for n in range(digit):
  21.         while seat_num > s_list[n]:
  22.             seat_num -= s_list[n]
  23.             x += 1
  24.         else:
  25.             dict_strnum += str(num_list[x])
  26.             #print(dict_strnum)#检查代码
  27.             del num_list[x]
  28.             x = 0
  29.     #dict_seat = int(dict_strnum)#检查代码
  30.     return dict_strnum

  31. x = seat(10,1000000)
  32. print(x)
复制代码

答案是2783915460

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-29 10:31:33 | 显示全部楼层
  1. # -*- coding:Utf-8 -*-
  2. import time
  3. start= time.clock()

  4. num=1000000
  5. list=[0,1,2,3,4,5,6,7,8,9]

  6. fact_sum=1
  7. dict_fact={0:1}# 存放阶乘结果
  8. for i in range(1,len(list)+1):
  9.     fact_sum=fact_sum*i
  10.     dict_fact[i]=fact_sum

  11. rel_str=''# 存放结果字符串
  12. for j in range(len(list),0,-1):
  13.     if num>=dict_fact[j-1] and num%dict_fact[j-1]==0:
  14.         rel_str+=str(list[int(num/dict_fact[j-1]-1)])
  15.         list.pop(int(num/dict_fact[j-1]-1))
  16.         if len(list)>0:
  17.             for i in range(len(list),0,-1):
  18.                 rel_str+=str(list[i-1])
  19.         break
  20.     elif num>=dict_fact[j-1] and num%dict_fact[j-1]!=0:
  21.         rel_str+=str(list[int(num/dict_fact[j-1])])
  22.         list.pop(int(num/dict_fact[j-1]))
  23.         num=num-dict_fact[j-1]*(int(num/dict_fact[j-1]))
  24.     elif num<dict_fact[j-1]:
  25.         rel_str+=str(list[0])
  26.         list.pop(0)

  27. print(rel_str)

  28. end = time.clock()
  29. print ("read: %f s" % (end - start))
复制代码


结果是:2783915460

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-29 12:31:04 | 显示全部楼层
严重支持
  1. def next(s):
  2.     end = True
  3.     for i in range(len(s)-2, -1, -1):
  4.         if s[i] < s[i+1]:
  5.             end = False
  6.             tmp = float('inf')
  7.             for j in range(i, len(s)):
  8.                 if s[j] > s[i]:
  9.                     if s[j] < tmp:
  10.                         tmp = s[j]
  11.                         k = j
  12.             break
  13.     if end == True:
  14.         return False
  15.     s[i], s[k] = s[k], s[i]
  16.     sr = s[i+1:len(s)]
  17.     sr.reverse()
  18.     s = s[0:i+1] + sr
  19.     return s

  20. s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  21. i = 1
  22. while True:
  23.     s = next(s)
  24.     i += 1
  25.     if i == 1000000:
  26.         for each in s:
  27.             print(each, end='')
  28.         break
复制代码

运行结果
  1. >>>
  2. 2783915460
  3. >>>
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-29 15:30:11 | 显示全部楼层
import itertools
a=1
temp=0
b=list(range(10))
find=False
for i in range(1,10):#固定开头,计算剩下9个的排列数
    a*=i
for i in range(10):#变换开头,计算合适超过100万
    temp+=a
    if temp>10e5 :
        temp-=a
        b=list(range(10))
        b.pop(i-1)
        for j in itertools.permutations(b):#排列可能性,合适等于100万
            temp+=1
            if temp==10e5:
                j=list(j)
                j.insert(0,i)
                print(j)
                find=True #表明发现,不在计算
                break
    if find:
        break

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-29 23:16:13 | 显示全部楼层
本帖最后由 bacon6581 于 2016-6-30 09:05 编辑

思路:
0开头,用剩下9个数进行排序,共用9!=362880种可能,且最大数为0987654321
1开头,最小的数就是1023456789,且其序列在0987654321的后一位。

1023456789 的序列为 1*9!+1=362881
2013456789 的序列为 2*9!+1=725761
3012456789 的序列为 3*9!+1=1088641

即第一位数字是“2”剩下还没用的数还有:013456789
2103456789 的序列为 2*9!+1*8!+1=766081
2701345689 的序列为 2*9!+6*8!+1=967681
2801345679 的序列为 2*9!+7*8!+1=1008001

即第二位数字是“7” 剩下还没用的数还有:01345689
...........
......

  1. from time import time
  2. start=time()

  3. def jiechen(n):
  4.     zhi=1
  5.     while n>1:
  6.         zhi=zhi*n
  7.         n-=1
  8.     return zhi

  9. num=list(range(10))

  10. result=0
  11. st=''

  12. while 1:

  13.     n=0
  14.     jc=jiechen(len(num)-1)

  15.     while result+jc<1000000:
  16.         result=result+jc
  17.         n=n+1
  18.     st=st+str(num.pop(n))

  19.     if len(num)==0:
  20.         break
  21. print(st)
  22. print(time()-start)
复制代码


YYPDF截图2016629231654.jpg
应该不会有比我速度更快了的吧!

点评

用阶乘算应该是最优的算法了  发表于 2016-7-4 18:18

评分

参与人数 1荣誉 +7 鱼币 +7 收起 理由
冬雪雪冬 + 7 + 7 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-30 12:24:34 | 显示全部楼层
  1. import math
  2. def quene (a,b):
  3.       l=len(a)
  4.       string=""
  5.       d=math.factorial(l)
  6.       if d<b:
  7.             return -1
  8.       elif d==b:
  9.             string+=''.join(reversed(a))
  10.             return string
  11.       a=sorted(list(a))
  12.       while l>1:
  13.             d=d//l
  14.             if d>b:
  15.                   string+=a[0]
  16.                   a.remove(a[0])
  17.             elif d==b:
  18.                   string+=a[0]+''.join(a[-1:0:-1])
  19.                   break
  20.             else:
  21.                   string+=a[b//d]
  22.                   a.remove(a[b//d])
  23.                   b=b%d
  24.             l-=1
  25.       return string

  26. print(quene("0123456789",1000000))
  27. print(quene("abcdefghij",1000000))
复制代码

  1. >>> quene("0123456789",1000000)
  2. '278391560'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-30 15:25:07 | 显示全部楼层
本帖最后由 shichaoufo 于 2016-6-30 15:27 编辑

结果2783915460
  1. import time
  2. sta = time.time()
  3. ys = ['0','1','2','3','4','5','6','7','8','9']
  4. def paixu(ys):
  5.     n=0
  6.     for a0 in ys:
  7.         ys.remove(a0)
  8.         for a1 in ys:
  9.             ys.remove(a1)
  10.             for a2 in ys:
  11.                 ys.remove(a2)
  12.                 for a3 in ys:
  13.                     ys.remove(a3)
  14.                     for a4 in ys:
  15.                         ys.remove(a4)
  16.                         for a5 in ys:
  17.                             ys.remove(a5)
  18.                             for a6 in ys:
  19.                                 ys.remove(a6)
  20.                                 for a7 in ys:
  21.                                     ys.remove(a7)
  22.                                     for a8 in ys:
  23.                                         n += 1
  24.                                         if n == 1000000:
  25.                                             ys.remove(a8)
  26.                                             return a0+a1+a2+a3+a4+a5+a6+a7+a8+ys[0]
  27.                                     ys.append(a7)
  28.                                     ys.sort()
  29.                                 ys.append(a6)
  30.                                 ys.sort()
  31.                             ys.append(a5)
  32.                             ys.sort()
  33.                         ys.append(a4)
  34.                         ys.sort()
  35.                     ys.insert(0,a3)
  36.                     ys.sort()
  37.                 ys.insert(0,a2)
  38.                 ys.sort()
  39.             ys.insert(0,a1)
  40.             ys.sort()
  41.         ys.insert(0,a0)
  42.         ys.sort()

  43. print("第100万个字典排列是%s" % paixu(ys))
  44. sto = time.time()
  45. ti = sto - sta
  46. print("用时%f秒" % ti)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-30 19:17:31 | 显示全部楼层
本帖最后由 mather 于 2016-6-30 19:23 编辑

先确定最高位:
10!=3628800 > 1000000
9!=362880 < 1000000
所以以0开头的共有9!个
以1开头的也有9!个
以0或1开头的共有2*9!个,所以共有725760个
以0或1或2开头的共有3*9!个这个数已经超过了1000000
所以最高位是2
算法1:
  1. #思路是从高位到低位依次确定数字
  2. import numpy as np
  3. #目前还剩余的数字0~9
  4. import datetime
  5. starttime = datetime.datetime.now()
  6. shengyushu = list(range(10))
  7. #计算所有可能的阶乘1!,2!,...,10!
  8. jishu = np.array(range(1,11))
  9. ld = np.cumprod(jishu)
  10. weizhi = 1000000#位置
  11. #由高到低依次确定各位上的数字
  12. jieguo = []
  13. lower = 0
  14. for i in range(9,-1,-1):#9,8,7,6,5,4,3,2,1,0
  15.     if i==0:
  16.         break
  17.     for j in range(1,i+1):
  18.         if (( lower + j * ld[i-1] <= weizhi ) and (lower + (j+1) * ld[i-1] > weizhi)):
  19.             if lower + j*ld[i-1] < weizhi:
  20.                 jieguo.append(shengyushu.pop(j))
  21.                 lower = lower + j * ld[i-1]
  22.             else:
  23.                 jieguo.append(shengyushu.pop(j-1))
  24.                 shengyushu.sort(reverse=True)
  25.                 jieguo.extend(shengyushu)
  26.                 break
  27. print(jieguo)
  28. endtime = datetime.datetime.now()
  29. interval=(endtime - starttime)
  30. print(interval)
复制代码

作为对比,用itertools中的permutations方法求一下
算法2:
  1. import itertools as it
  2. import datetime
  3. starttime = datetime.datetime.now()
  4. index = 0
  5. for x in it.permutations(range(10),10):
  6.     index += 1
  7.     if index==1000000:
  8.         print(x)
  9. endtime = datetime.datetime.now()
  10. interval=(endtime - starttime)
  11. print(interval)
复制代码



结果:
[2, 7, 8, 3, 9, 1, 5, 4, 6, 0]
2783915460
用时:0:00:00.001232

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-1 17:15:15 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-2 15:59:47 | 显示全部楼层
初学Python,第一次提交小练习答案,好激动呀~~


  1. import time
  2. start = time.clock()


  3. #计算阶乘
  4. def factorial(num):
  5.         max_order = num
  6.         temp = range(1,num)
  7.         for i in temp:
  8.                 max_order *= i
  9.         return max_order

  10. #计算倍数和余数
  11. def s_order(max_order,order_num):
  12.         times = order_num / max_order
  13.         residue = order_num % max_order
  14.         return [times,residue]


  15. #主函数
  16. top_num = 10
  17. order_num = 1e6
  18. num = list(range(top_num))
  19. final_order = []
  20. k =0
  21. flag = 0


  22. for i in num:
  23.         if i == 0:
  24.                 max_order = [factorial(i+1)]
  25.         else:
  26.                 max_order.append(factorial(i+1))
  27. [times,residue] = s_order(max_order=max_order.pop(),order_num=order_num)
  28. order_num = residue


  29. while len(num):
  30.         k += 1
  31.         [times,residue] = s_order(max_order=max_order.pop(),order_num=order_num)

  32.         order_num = residue
  33.         if order_num == 0:

  34.                 final_order.append(num[int(times)-1])
  35.                 num.remove(num[int(times)-1])
  36.                 num.reverse()
  37.                 final_order.extend(num)
  38.                 break
  39.         final_order.append(num[int(times)])
  40.         num.remove(num[int(times)])


  41. print(final_order)
  42. end = time.clock()
  43. print ("read: %f s" % (end - start))   
复制代码


输出结果
[2, 7, 8, 3, 9, 1, 5, 4, 6, 0]
read: 0.049137 s

多谢指教~~

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-4 09:28:58 | 显示全部楼层
  1. import itertools
  2. n = enumerate(itertools.permutations('0123456789'),1)
  3. for k,v in n:
  4.     if k == 1000000:
  5.         print(''.join(v))
  6.         break
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 14:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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