rt
肯定不能百分之百对了,不然都中了。
给个类似的例子,我想看看算法。

解决方案 »

  1.   

    这个算法主要是使用数组。再用就是生成随机数。
    写过Java的可以供参考,可以修改为PL/SQL存储过程。package net.liugeng.lottery;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.Random;
    public class Main
    {
    public static void main(String[] args)
    {
    // 产生几组随机数,要求一组数中不能有重复的数字
    System.out.print("请输入投注注数: ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int nums = 0;
    try
    {
    nums = Integer.parseInt( br.readLine() );
    }
    catch(IOException e)
    {
    System.out.println(e.getMessage());
    }
    int[][] result;
    result = new int[nums][7];
    Random rand = new Random();
    for(int i = 0; i < nums; i ++)
    {
    for(int j = 0; j < 6; j ++)
    {
    int newNum = rand.nextInt(33) + 1;
    while(true)
    {
    boolean flag = true;
    for(int k = 0; k < j; k ++)
    {
    if(newNum == result[i][k])
    {
    flag = false;
    }
    }
    if(flag == true)
    {
    break;
    }
    newNum = rand.nextInt(33) + 1;
    }
    result[i][j] = newNum;

    }
    result[i][6] = rand.nextInt(16) + 1;

    }

    for(int i = 0; i < nums; i ++)
    {
    System.out.print("第" + (i+1) + "组: 红色球为: ");
    for(int j = 0; j < 6; j ++)
    {
    System.out.print(result[i][j] + " ");
    }
    System.out.print("蓝色球为: " + result[i][6]);
    System.out.println();
    }


    }}
      

  2.   

    可以建一张总表,把红球全部放进去,建一个唯一ID,也才一百多万,再用select TRUNC(dbms_random.value(1,MAX(ID)+1)) from dual.呵呵
      

  3.   

    CREATE OR REPLACE PROCEDURE get_shuangse_num
    IS
    red_hao   dbms_sql.number_table;
    bule_hao  NUMBER;
    l_output  VARCHAR2(200) :='红球是:';
    BEGIN
      SELECT r_hao BULK COLLECT INTO red_hao FROM (
        SELECT LEVEL r_hao from dual CONNECT BY LEVEL<=33 ORDER BY dbms_random.value)
      WHERE ROWNUM<=6
      ORDER BY r_hao;
      
      SELECT b_hao INTO bule_hao FROM (
            SELECT LEVEL b_hao from dual CONNECT BY LEVEL<=13 ORDER BY dbms_random.value)
       WHERE ROWNUM<=1;
      
       FOR i IN 1..red_hao.count LOOP
         l_output := l_output||red_hao(i)||',';
       END LOOP;
      
       l_output := LTRIM (l_output,',');
       dbms_output.put_line(l_output||' 蓝球是:'||bule_hao);
    END;简单SP。
      

  4.   

     SELECT LEVEL b_hao from dual CONNECT BY LEVEL<=13 ORDER BY dbms_random.value
    这一句要改为16才对,好像是16个的是吧!
      

  5.   

    declare
      type tab is table of integer index by binary_integer;
      v_tab      tab;
      v_num      int;
      v_i        int := 0;
      v_continue boolean := false;
    begin
      for i in 1 .. 7 loop
        v_i := v_i + 1;
        v_tab(v_i) := 0;
      end loop;  v_i := 0;  loop
        v_num      := round(dbms_random.value(1, 36));
        v_continue := false;
        for i in 1 .. 6 loop
          if v_tab(i) = v_num then
            v_continue := true;
          end if;
        end loop;
      
        if v_continue = false then
          v_i := v_i + 1;
          v_tab(v_i) := v_num;
          if v_i < 7 then
            dbms_output.put_line('red' || v_i || '=' || v_num);
          else
            dbms_output.put_line('blue' || '=' || v_num);
          end if;
        end if;
        exit when v_i = 7;
      end loop;end;