當前位置:首頁 » 編程語言 » c語言幾個數中選幾個隨機組合
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言幾個數中選幾個隨機組合

發布時間: 2022-05-15 18:42:13

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生成下標范圍內的隨機數,以此隨機數為下標取得數組中的數據即可。