① 请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写
public static void main(String[] args) { int[] x = new int[33]; //创建值为1-33的整数表, 初始化 for (int i = 0; i < x.length; i++) { x[i] = i+1; } // ------------------------------------------------- for (int i = 0; i < 6; i++) { // 随机取值6次 (你可以把6改成33. 试试看会不会出现重复值) int j = (int) (Math.random()*(33-i)); // 随机值依次递减1, 以保证不可能重复随机到33这个值 System.out.println("第" + (i+1) + "个随机数为: "+ x[j]);// 输出随机值(真正的随机值为整数表x中的数) x[j] = x[33-i-1]; // 整数表x中已被随机到的值替换为表中最后一个数, 避免以后可能随机到 } // ------------------------------------------------- // 整个思路你可以想象成是栈堆的出栈, 随机到的值出栈, 就不会随机到重复值 } 有问题欢迎继续提问, 希望能帮你解决问题!
② 求一段c语言代码,从1到33里随机取六个数加起来的和
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i;
int a[6];
int s=0;
srand((unsigned)time(NULL));
for(i = 0;i < 6;i++ )
{
a[i] = rand() % 33 + 1;
s+=a[i];
}
printf("The sum of %d %d %d %d %d %d is:%d\n",a[0],a[1],a[2],a[3],a[4],a[5],s);
}
至于要不重复的,可以用两种方法:
1、生成随机数时,检查之前产生的数,看有没有重复,有重复则继续生成
2、声明一个布尔型的tag[34]数组,分别用来表示1-33中哪个数产生过了。
③ 请问从33个数中取六个数,概率是多少不用排列顺序。谢谢
不同的取法有C(33,6)=33!/(27!6!)=33*32*31*30*29*28/720=1107568
所以概率为1/1107568≈9.03*10^(-7)
④ 如何实现,在1-33之间取6个数为一组,6个数从小到大排列,且不能重复,然后把所有可能列表。
<%
Dim a,i,lp
lp = True
a = Array(1,2,3,4,5,6)
Do While lp
print a
If a(5) < 33 Then
a(5) = a(5) + 1
Else
If a(4) < 32 Then
a(4) = a(4) + 1
a(5) = a(4) + 1
Else
If a(3) < 31 Then
a(3) = a(3) + 1
a(4) = a(3) + 1
Else
If a(2) < 30 Then
a(2) = a(2) + 1
a(3) = a(2) + 1
Else
If a(1) < 29 Then
a(1) = a(1) + 1
a(2) = a(1) + 1
Else
If a(0) < 28 Then
a(0) = a(0) + 1
a(1) = a(0) + 1
Else
lp = False
End If
End If
End If
End If
End If
End If
Loop
Sub print(a)
For i = 0 To 5
response.write a(i) & ","
Next
response.write "<br>"
End Sub
%>
输出结果很长,
⑤ sql 小程序随机从33个数中取6个
全部放到一个列,
select top 6 * from 列名 order by newid()
1~16号同理
⑥ 急!33个数中选6个,不能重复,有多少组组合怎么算的
=C(33,6)=33*32*31*30*29*28/(6*5*4*3*2*1)=1107568注
⑦ 从1-33中选6个数字,其数字不同,和值等于86结果N个组合。有什么公式可以解决,如电子表格等
在Excel里,同时按Alt和F11进入宏界面,点菜单的插入,模块,粘贴如下代码:
Sub test()
Application.ScreenUpdating = False
Dim i, j, k, l, m, n, x As Integer
x = 1
For i = 1 To 28
For j = i + 1 To 29
For k = j + 1 To 30
For l = k + 1 To 31
For m = l + 1 To 32
For n = m + 1 To 33
If i + j + k + l + m + n = 86 Then
Cells(x, 1) = i & "," & j & "," & k & "," & l & "," & m & "," & n
x = x + 1
'If x Mod 500 = 1 Then
'If MsgBox("Continual?", vbYesNo, "Hi") = vbNo Then Exit Sub
'End If
End If
Next
Next
Next
Next
Next
Next
Application.ScreenUpdating = True
End Sub
在此界面直接按F5运行此宏,等一会,完成。
⑧ 用matlab编程:从1到33个中随机选取6个数,从1到16随机选取1个数字
for i = 1:6
x(i) = 33*randn();
end
x(i)中即为1到33中的随机数,共6个。其它类推
⑨ C/C++语言 从33个数中选6个排列组合 具体答案
// xx.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int i,n,c,j;
int a[6];//记录数组下标
int b[33];//存所要随机的33个数
for(i=0;i<33;i++)
b[i]=i;
srand(unsigned(time(NULL)));
a[0]=rand()%33;//赋初值
for(i=1;i<6;i++)//随机5个不同下标的数
{
c=rand()%33;//随机0-32 的数
for(n=0;n<i;n++)
{
j=0; //检索位,如果存在相同值j置-1;
if(a[n]==c)j=-1;
}
if(j==-1)i=i-1;//如果存在相同值,返回上一层循环
else a[i]=c;// 不同则将新的随机值,附给数组a
}
for(i=0;i<6;i++)
{
printf("%d ",b[a[i]]);//根据随机的6个不同下标值,输出
}
getchar();
}