⑴ c语言菜鸟求助 在已知的几个数之间随机选择一个
#include <time.h>
#include <iostream>
using namespace std;
int GetSrand(int a[],int len)
{
srand(time(0));
return a[rand()%len];
}
int main()
{
int a[] = {1,2,3,6,8,9};
int r = GetSrand(a,6);
cout<<r<<endl;
return 0;
}
将这些数放入一个数组中,随机得到数组的下标就可以了。
⑵ C语言:从11个数中随机选3个组合在一起。
写个 C 控制台的,
它能够完成 从任意个数中随机选择任意个组合,并且按一下键盘,
将这个组合显示出来。
为什么会这样,这和你的说法不一致,因为你说的部分内容不好界定,
就是"我敲165下任意键,逐个显示。"这一句。
可以修改这个程序的输出部分,达到你的需要。
//加吧,getch,rand都在哪里呢?
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
//这两个宏,允许修改成任意个数,比如从12个数里选4个...
//定义数11个
#define MAX_DIGIT 11
//定义选3个,要求 SEL_DIGIT < MAX_DIGIT
#define SEL_DIGIT 3
void your_programing()
{
//定义数组
int digit[MAX_DIGIT];
int select[SEL_DIGIT];
int i,j;
char key;
bool flag;
//向地球人打声招呼,一切就要开始了
printf("\nhello,world\n");
//初始化数组,或者按环境要求初始化
//这里假定允许有重复数,无序
//不想重复,就多一道处理
for (i = 0; i < MAX_DIGIT; i++)
{
//用随机数初始化
digit[i] = ((rand() << 16) | rand());
}
//弄个简单死循环,要求输入字符'q' 或 'Q'退出
while (1)
{
printf("\nPlease press any key,if q or Q then quit.\n");
key = getch();
if (key == 'q' || key == 'Q')
{
//没办法,人家选择退出了,还不快退,要待何时?
break;
}
//闲话休说,进入主题
//要随机选3个数组合,就要将选中数存入select数组
for (i = 0; i < SEL_DIGIT; i++)
{
//用随机数来做任意数量的选择,但要处理重复结果
do
{
flag = false;
//产生不越界的数组下标
select[i] = rand() % MAX_DIGIT;
//检查下标是否重复
for (j = 0; j < i; j++)
{
if (select[i] == select[j])
{
//出现重复下标,赶紧重新选择
flag = true;
break;
}
}
}while (flag);
//非常愉快,找到了可用的下标
}
//非常愉快,获得了可心的随机数
//打印出这个随机的组合
printf("\nThe %d Selected is ",SEL_DIGIT);
for (i = 0; i < SEL_DIGIT; i++)
{
//很有趣,因为我们利用了模算术做下标的特点
//所以,这里只需访问数组下标即可,而且考虑了越界
printf("%d",digit[select[i]]);
//打印个分隔符吧,看着也舒服
if (i != 0 && i != SEL_DIGIT - 1)
{
printf(",");
}
}
}
//程序要结束了,说点什么吧
printf("\nThe End.\n");
}
///小注:
前文提到rand()的随机性问题,的确如此,它的白噪声一般应用尚可,
看你的应用环境了,严格的可选择专业的白噪声发生器。
//
⑶ C语言中如何在几个数据段中生成随机数,比如在1-10和20-30中生成
sz[j]=sz[j+1];数组下标是从0开始的,所以J=9,j+1=10,而是S[10]就越界了。不知道这个代码是哪里来的我运行了一下你贴出来的代码觉得有很多不合逻辑的地方。首先sz这个数组没有任何实际的意义,姑且推断它是用来存储结果的吧。再说sz[10],如果你debug看一下。实际上数组的取值和指针极为相似,是从sz的值开始,向后偏移[下标]个对象的距离。所以这个程序里它把后面那个内存里的数据给读出来,并且赋值了。intmain(void){inti;intr;intsz[10];srand(time(NULL));printf("Tenrandomnumbersfrom0to9\n\n");for(i=0;i<10;i++){r=rand()%(10-i);sz[i]=r;cout<
⑷ 如何用C语言从固定的一些数中产生随机数
楼上的有问题,很可能相当长的时间才能完成一次随机,运气不好一天都完不成一次
/* 我自己想的一个方法:
1,数组flag[48],表示48个数是否被选中,初始化为0,表示未被选中。
2,srand(),rand()得到一个随机数m。
3,然后得到我们需要的随机数。第一次是m%48+1,第二次是m%47+1,第三次是m%46+1,...,最后一个不需要随机了。
4,每次获取随机数后,这个随机数表示第几个未被选中的数,每次选中后将flag标志置1。
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int Num = 48; // 需要随机的次数
// 选中标志
int Flag[48] ={0}; // 标记是否已经被随机
// 输出数据
int bufArr[48]={0}; // 保存随机后的数据
int i = 0;
int j = 0;
int Rand_num = 0; // 保存中间随机到的数据
int Rand_max = 0; // 保存当前存在的数据数量
Rand_max = Num;
srand(time(0));
// 产生随机数
for(i = 0; i < Num; i++)
{
Rand_num = rand()%Rand_max + 1; // 获取随机数Rand_num
for(j = 0; j < Num; j++) // 遍历所有数据
{
if(!Flag[j]) // 判断该数据是否已经随机
Rand_num--;
if(!Rand_num) // 判断是否数到第Rand_num个没有标记的数据
break;
}
bufArr[i] = j+1; // 获取结果,第Rand_num个没有标记的数据
Flag[j] = 1; // 置获取标志
Rand_max--; // 需要随机的数减少一个
}
// 每次都不一样
for(i = 0; i < Num; i++)
{
if(i%8 == 0)
printf("\n");
printf("%5d", bufArr[i]);
}
printf("\n");
return 0;
}
⑸ 如何用C语言实现 从指定的几个数中随机抽出一个数。这几个数不是连续的,而是零散的。
M是指定的数的个数,nums[]存放需要的数
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define M 10
int main()
{
int nums[M] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
srand((unsigned)time(0));
printf("%d\n", nums[rand()%M]);
}
⑹ C语言中100个数中随机选取10个不同的数如何实现
首先要确定这100个数的范围,比如0-99。
然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。 直到抽取到不重复的10个数为止。
示例代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain()
{
inta[10];//存储结果。
inti,j;
srand(time(NULL));//通过获取时间值来设定随机数种子,以保证每次运行结果不同。
for(i=0;i<10;)//注意,第三项留空,因为需要判断每次得到的数值是否重复,如重复则不进行i的自加
{
a[i]=rand()%100;//得到一个0-99中的随机数。
for(j=0;j<i;j++)
if(a[j]==a[i])break;//发现重复,结束内循环
if(j==i)i++;//如果i和j相等,代表内循环是达到条件退出的,即不是通过break,也就是没有重复项。
}
for(i=0;i<10;i++)//输出得到的数值。
printf("%d,",a[i]);
printf(" ");
return0;
}
以下是运行该程序三次分别得到的结果(每行一次),可以看到是实现了所有功能的。
96,84,85,30,29,97,92,51,38,81,
49,42,13,18,24,1,75,91,60,5,
68,16,23,79,17,59,83,82,34,70,
⑺ C语言中,怎样在固定的数列中,随机选出3个数
以下代码能从0~9这10个数中随机选出3个数来。若有其他要求你可照猫画虎……
#include<stdio.h>
#include"stdlib.h"
#include"time.h"
intmain(void){
inta[]={1,2,3,4,5,6,7,8,9,0},i,j,k,t;
srand((unsigned)time(NULL));
for(k=10,i=0;i<3;i++){
printf("%d",a[j=rand()%k]);
t=a[--k],a[k]=a[j],a[j]=t;
}
printf(" ");
return0;
}
⑻ C语言如何随意抽几个数字组成组合,新手求助,急
太麻烦了...
我只编了一部分
这个题实在有点野蛮
...
#include <iostream>
#include <time.h>
using namespace std;
void main()
{
int array_A[]={1,3,4,7};
int array_B[]={2,5,8,10};
int array_C[]={6,11,12};
int array_D[]={1,2,9,13,14,15};
int array_M[]={0,0,0,0};//初始化结果
int *p;
int i,j;
i=rand()%6;
array_M[0]=array_D[i];
do
{j=rand()%6;}
while((i==j)||(array_D[i]+array_D[j])<4);
array_M[1]=array_D[j];
if(array_D[0]<7||array_D[1]<7)
{
if(array_D[0]>12||array_D[1]>12)
{i=rand()%3;
switch(rand()%2)
{case 0:
if(i==0) array_M[2]=array_B[2];
if(i==1) array_M[2]=array_B[3];
if(i==2) array_M[2]=array_C[1];
case 1:
if(i==0) {array_M[2]=array_B[2]; array_M[3]=array_B[3]; }
if(i==1) {array_M[2]=array_B[3]; array_M[3]=array_C[1]; }
if(i==2) {array_M[2]=array_C[1]; array_M[3]=array_B[2]; }
// default:
//statements ;
// break;
}
}
else if(array_D[0]<12||array_D[1]<12)
{
//8 10 11 12 选一个
//或8 10 11 12 选两个
}
else
{
//有12 或没有12
//与上面相同
}
}
}
⑼ c语言从n个数中选m个数的组合
#include<stdio.h>
unsignedlongfactorial(intn);
unsignedlongcombination(intn,intm);
intmain(){
intn,m;
scanf("%d%d",&n,&m);
printf("combination(%d,%d)=%u
",n,m,combination(n,m));
return0;
}
unsignedlongcombination(intn,intm){
unsignedlongres=1;
res=factorial(n)/((factorial(n-m)*factorial(m)));
returnres;
}
unsignedlongfactorial(intn){
inti;
unsignedlongf=1;
for(i=1;i<=n;i++)
f*=i;
returnf;
}
⑽ 在c语言中如何实现:在元素组中随机抽取几个元素
弄一个数组,用某种规则的数据把它填满。然后库函数rand生成下标范围内的随机数,以此随机数为下标取得数组中的数据即可。