发布网友 发布时间:2022-04-23 03:33
共1个回答
热心网友 时间:2023-08-29 18:54
重新分析特点:1 到 100 总共 100 个数,无重复全部输出; 新思路出现了:先把 1 到 100 顺序存放在一个长度为 100 的数组中,然后随机产生两个 1到 100 的数字,假设 a = 4 , b = 21 ,然后把处于数组 [第 4 位] 和 [第 21 位]的数字对调。同样方法,进行 N 次,序列里的数字就变成了乱序,而且,因为是对调,所以也就不会出现重复问题。代码: int[] arr = new int[100]; //初始化数组 for(int i=1;i<=100;i++) { arr[i] = i; //给每个单元顺序赋值 } Random rnd = new Random();//初始化随机数生成器 int N = 200; //假设重复对调 200 次 for(int i=0;i<N;i++) { int a = rnd.Next(0,100);//随机选取两个单元下标 int b = rnd.Next(0,100);//区间范围 0 ~ 99 int temp = arr[a]; //经典的两数交换 arr[a] = arr[b]; arr[b] = temp; } //现在得到的数组就是乱序无重复数组 其实,这个思路就相当于:在一个袋子里,扔进去编号为 1-100 的 100 个球,然后摇晃袋子,相当于两个球在交换位置,得到的自然也就是乱序的,球不会变,所以是无重复的。