编程实现35选7彩票销售程序。用户从键盘输入要买彩票的注数n,程序随机产生n注号码并输出。每注号码为7个1~35的随机整数,每注7个号码中不能有重复号码。要具体程序!
关于java的问题,具体程序编写
- 提问者网友:寂寞撕碎了回忆
- 2021-07-17 18:45
- 五星知识达人网友:枭雄戏美人
- 2021-07-17 20:00
public class test {
public static void main( String[] args ) {
int[] a = new int[35];
for ( int i = 0; i < 35; ++i ) {
a[i] = i + 1;
}
int n;
Scanner s = new Scanner( System.in );
n = s.nextInt();
select( a, n );
}
static void select( int[] a, int n ) {
for ( int i = 0; i < n; ++i ) {
shuffle( a );
System.out.print( "第"+ (i+1) +"注:" );
for ( int j = 0; j < 7; ++j ) {
System.out.print( a[j] + " " );
}
System.out.println();
}
}
static void shuffle( int[] a )
{
int t, tmp;
for ( int i = 0; i < a.length; ++i ) {
t = (int)(Math.random()*35);
tmp = a[t];
a[t] = a[i];
a[i] = tmp;
}
}
}
- 1楼网友:春色三分
- 2021-07-17 21:48
可以在控制台手动的输入你想多少选多少的值,排列直接就输出了!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; class ArrayCombination {
public static void main(String[] args) throws IOException { // 得到N和I的值 int[] num = getNAndI(); int N = num[0]; int I = num[1]; // 如果在N中取I个值,则建立一个长度为I的数组,保存每次要输出的值 int[] arr = new int[I]; // 设置第一次要输出的值 setFirstValue(arr, I); // 按进位规则依次输出值,直到结束 output(arr, N, I); }
private static int[] getNAndI() { int N = 0; int I = 0; boolean con = true; // 读入N和I的值,当有异常时,重新要求输入 while (con) { try { // 读入N System.out.print("请输入N:"); BufferedReader bReader = new BufferedReader( new InputStreamReader(System.in)); N = Integer.parseInt(bReader.readLine()); System.out.print("请输入I:"); bReader = new BufferedReader(new InputStreamReader(System.in)); I = Integer.parseInt(bReader.readLine()); // N和I必须都大于0,且I要不能超过N if (I <= N && I > 0) { con = false; } else { System.out.println("错误:N和I值不满足条件!"); } } catch (Exception e) { // 一般是输入的数字不正常时出错,如输入的是字符 System.out.println(e); } } return new int[] { N, I }; }
private static void setFirstValue(int[] arr, int I) { // 给输出值赋初始值,例如5个里面取3个,第一次要输出的就是{1,2,3} for (int i = 0; i < I; i++) { arr[i] = i + 1; } }
private static void output(int[] arr, int N, int I) { // 当第一位值为N-I+2的时候结束,如N为5,I为3,则最后一次输出的是{3,4,5},第一位是进位为4的时候不符合条件,结束 while (arr[0] != N - I + 2) { System.out.print("{"); for (int i = 0; i < I; i++) { // 除了第一位输出,其他的都要加"," if (i != 0) { System.out.print(","); } System.out.print(arr[i]); } System.out.print("}"); System.out.println(); // 输出后,执行循环,一直到不能输出为止10 doRun(arr, N, I); } }
private static void doRun(int[] arr, int N, int I) { int length = arr.length; int k = 0; // 是否需要进位标志,true表示不用进位 boolean flag = true; for (int i = 0; i < I; i++) { // 如果最后一位需要进位,判断其前面对应位是否也需要进位 if (arr[length - 1 - i] == N - i) { // 递归判断前面位是否需要进位 k = check(arr, length, N, i); arr[length - 2 - k]++; // 在该位加1后,右边的位均按照此位依次加1 for (int j = 0; j <= k; j++) { arr[length - k + j - 1] = arr[length - 2 - k] + j + 1; } // 是否需要进位设置成false,表示有进位 flag = false; break; } } // 如果每一位都不用进位,则直接在最后一位加1 if (flag) { arr[length - 1]++; } }
private static int check(int[] arr, int length, int N, int i) { // 如果该位需要进位,判断其左边一位是否继续要进位 if (arr[length - 1 - i] == N - i && length - 1 - i > 0) { return check(arr, length, N, i + 1); } return i - 1; } }
- 2楼网友:神鬼未生
- 2021-07-17 21:13
- 3楼网友:爱难随人意
- 2021-07-17 20:40