用Python或者Java如何生成多位数字不重复的数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Python或者Java如何生成多位数字不重复的数相关的知识,希望对你有一定的参考价值。

比如生成8位不重复数字的数为例,即每一位不能有重复的数字:
12345678
21345678
34567812
.......
有8*7*6*5*4*3*2*1个组合,但是怎么用语言实现呢?
谢谢!

参考技术A 第一种方法:
import java.util.LinkedHashSet;
import java.util.Random;
import java.util.Set;

public class RandomNumber
public static void main(String[] args)

Set<String> set = new LinkedHashSet<String>();

while (set.size() < 20)
Set<Integer> mySet = new LinkedHashSet<Integer>();
Random rd = new Random();
while (mySet.size() < 8)
mySet.add(rd.nextInt(8) + 1);


String s = "";
for (Integer o : mySet)
s += o;

set.add(s);


for (String o : set)
System.out.println(o);





第二种方法:
for(int i=12345678;i<=87654321;i++)

String s=String.valueOf(i);
char[] c=s.toCharArray();
Arrays.sort(c);
if(!String.valueOf(c).equals("12345678"))

continue;

System.out.println(s);
参考技术B java:

ArrayList<Integer> a=new ArrayList<Integer>();
for(int i=0;i<10;i++)

a.add(i);

for(int i=0;i<10;i++)

int id=new Random().nextInt(a.size());
System.out.print(a.remove(id)+" ");

(记得导入相关包就行)
望采纳

005-做题:使用 Python 生成 200 个激活码

题目:使用 Python 生成 200 个不重复的激活码

编写思路
# 激活码一般是由26个大写字母和10个数字任意组合而成
# 长度为12位或者16位的居多激活码
# 一个激活码里的字符是可以重复的,而且必须要保证激活码是不能重复的

 

测试用例

# 1、随机生成字符:数字加字母
# 2、生成200个
# 3、去重

 

编码:

第一步:随机生成16位字母跟数字的字符串

1.调用ramdom模块,使用了import random

2.choice()  方法返回一个列表,元组或字符串的随机项

使用了random.choics(seed),从seed中随机获取字符串

3.join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串

join()方法语法:str.join(sequence) 

使用"".join(sa)将随机生成的16个字符串连接在一起

 1 import random
 2 
 3 # 生成16位字符串
 4 def random_str():
 5     seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
 6     sa = []
 7     for i in range(16):
 8         sa.append(random.choice(seed))
 9     salt = "".join(sa)
10     print(salt)
11     return salt

第二步:生成200个字符串

使用for循环,调用random_str()函数

1     for i in range(200):
2         L.append(random_str()) 

第三部:删除重复的激活码

1.添加删除重复激活码函数

当两个激活码相同时,打印出重复激活码,并对该激活码进行标识

2.删除重复激活码

对标识过的激活码进行删除

def Removal():
    for i in range(200):
        for j in range(i+1,200):
            if L[i] == L[j]:
                print("重复的激活码:", L[i])
                L[i] = -1
    i = 0
    while i < len(L):
        if L[i] == -1:
            print("删除重复元素", L[i])
            L.remove(L[i])
            i -= 1
        else:
            i +=1

 

完整代码如下:

import random

# 生成16位字符串
def random_str():
    seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    sa = []
    for i in range(16):
        sa.append(random.choice(seed))
    salt = "".join(sa)
    print(salt)
    return salt

# 去除重复激活码
def Removal():
    for i in range(200):
        for j in range(i+1,200):
            if L[i] == L[j]:
                print("重复的激活码:", L[i])
                L[i] = -1


if __name__ =="__main__":
    L = []
    for i in range(200):
        L.append(random_str())  #生成两百个激活码
    L[0] = L[1] #校验L[0]=L[1]时,是否删除重复
    Removal()
    i = 0
    while i < len(L):
        if L[i] == -1:
            print("删除重复元素", L[i])
            L.remove(L[i])
            i -= 1
        else:
            i +=1

 备注:例子还不完善,重复的激活码被删除后,没有补充进新的激活码,可能导致激活码数量不足200个

以上是关于用Python或者Java如何生成多位数字不重复的数的主要内容,如果未能解决你的问题,请参考以下文章

Python开发区块链之04如何生成多签名的bitcoin address

java如何生成12位永远不重复的数字

如何在Java程序中写一个方法可随机生成12位数字,且永远不会重复,唯一的。

SQLServer快速生成多字段sql语句

java 一次生成一个无重复随机

如何鞋子批发生成多站点