① c語言寫出100個隨機數中取大的演算法
輸入100個隨機數,從第一個開始比較,取出兩者中大的數,再跟第三個數比較,在取出其中較大者,如此循環,至比較完第100個數為止。
② 求從n個數中抽取隨機數的c語言演算法。
int a[9][8];定義數組包含math.h time.h頭文件 運用rand()函數和系統時間用系統的時間做隨機種子。對產生的隨機數%100就能保證隨機數都<100.最後加1,EQlxCg
③ C語言演算法:隨機9個數,組成6個加減等式
你定義一個3 * 3 的二維數組,然後
在填滿的時候計算六次看是否都滿足
這大概是很簡單的了
arr[3][3]
arr[0][0] + arr[0][1] == arr[0][2] && arr[1][0] + arr[1][1] == arr[1][2] &&
arr[2][0] + arr[2][1] == arr[2][2] && arr[0][0] - arr[1][0] == arr[2][0] &&
arr[0][1] - arr[1][1] == arr[2][1] && arr[0][2] - arr[1][2] == arr[2][2]
差不多就是這樣了。
④ c語言,求0~7中任意隨機取5個不同的數的組合演算法
//敢問,那錯了?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i = 0, j = 0;
int a[5];
srand((unsigned)time(NULL));
for (i = 0; i < 5; ++i)
{
a[i] = rand()%8;
for (j = 0; j < i; ++j)
{
if (a[j] == a[i]) break;
}
if (j < i)
{
i--;
}
}
printf("此次組合為:");
for (i = 0; i < 5; ++i)
{
printf("%d ", a[i]);
}
printf("\n");
}
//列印出所有的組合種類:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i,j,k,m,n;
int num = 0;
printf("所有組合如下:\n");
for (i = 0; i < 8; ++i)
{
for (j = 0; j < 8; ++j)
{
if (i == j) continue;
for (k = 0; k < 8; ++k)
{
if ((i == k)||(j == k)) continue;
for (m = 0; m < 8; ++m)
{
if ((i == m)||(j == m)||(k == m)) continue;
for (n = 0; n < 8; ++n)
{
if ((i == n)||(j == n)||(k == n)||(m == n)) continue;
printf("%d %d %d %d %d\n",i,j,k,m,n);
num++;
}
}
}
}
}
printf("一共有%d種組合.\n",num);
}
⑤ 這題的c語言源代碼,還有解題思想,隨機化演算法,麻煩手打,謝謝
//隨機化演算法用隨機投點法計算定積分
#include<stdio.h>
#include<math.h>
#include<time.h>//使用當前時鍾做種子
doubleDarts(intn,doublea,doubleb);
doublef(doublex);//積分函數
main(){
inti,n[5]={100,1000,1000,10000,10000000};//隨機投點個數,個數越多結果越精確
doublea=1.0,b=2.0;//積分上下界
srand((unsigned)time(NULL));//初始化隨機數
for(i=0;i<5;i++)
printf("%d: n=%d r=%lf ",i+1,n[i],Darts(n[i],a,b));
}
/*基本思想是在矩形區域內隨機均勻投點,求出由這些點
*產生的函數值的算術平均值,再乘以區間寬度,即可得
*出定積分的近似解
*/
doubleDarts(intn,doublea,doubleb)
{
inti;
doublesum=0.0;
for(i=0;i<n;i++){
doublex=(b-a)*rand()+a;//產生[a,b)之間的隨機數
sum=sum+f(x);
}
return(b-a)*sum/n;
}
doublef(doublex){
returnsin(x)/x;
}
⑥ c語言 (排序演算法)隨機輸入10個整數,將其從大到小排序並輸出。
#include<stdio.h>
void main()
{
int i,a[10];
void paixu(int s[10],int n);
printf("請輸入10個數: ");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
paixu(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i] );
printf(" ");
}
void paixu(int s[10],int n)
{
int i,j,t=0;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(s[i]<s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
⑦ C語言演算法,隨機猜測數字
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inti,count,n,m;
srand(time(NULL));
//以當前時間為隨機數種子,以產生不同的隨機數列
n=(rand(n)%100)+1;
count=1;
while(count<=10){
printf("輸入您的猜測數字(1~100):");
scanf("%d",&m);
if(m==n){
printf("恭喜您猜對了!總計猜%d次! ",count);
return0;
}
elseif(m<n){
printf("太小,");
}
else{
printf("太大,");
}
printf("剩餘%d次機會! ",10-count);
count++;
}
printf("超出嘗試次數,游戲結束! ");
return0;
}
⑧ 數據結構(用c語言描述),是隨機快速排序演算法,劃紅線部分那裡我不懂,希望有學霸能解釋一下,越詳細越好
這是一個randomi的函數,作用是返回一個隨機值,在1到r之間。
return後面那個公式就是返回的隨機數字。
1*rand()是隨機得到一個數字,在除以RAND_MAX得到的是一個隨機的百分比。
RAND_MAX就是rand()的范圍大小。
隨機百分比得到了,在乘(r-1)就得到這個(r-1)范圍內隨機比例。
最後再加上1保證得到的數字是在1和r之間的。
這樣就能輸出一個隨機數字了。
精髓是後面那個除法得到一個隨機的比例,前面的乘法和加法都是為了限定范圍的修修補補。
⑨ 用C語言隨機函數生成100個不大於100的數的具體演算法怎麼寫
http://blog.tianya.cn/blogger/post_show.asp?idWriter=0&Key=0&BlogID=382219&PostID=4547421
以上網有詳細的說明
/*已經上機通過測試:*/
#include <stdlib.h>
main()
{
int a[100],i; /*定義數組存放100個數*/
for(i=0;i<100;i++)
a[i]=random(100); /*產生100以內的數*/
for(i=0;i<100;i++)
printf("%d ",a[i]); /*列印輸入*/
getch();
}
在C語言函數庫中包含了一個產生隨機數的函數:
int rand( void );
在函數庫中對這個函數的說明是:
The rand function returns a pseudorandom integer in the range
0 to RAND_MAX. Use the srand function to seed the pseudorandom
-number generator before calling rand.
而在C語言函數庫中是這樣定義RAND_MAX的:
/* Maximum value returned by "rand" function
*/
#define RAND_MAX 0x7FFF
所以,函數int rand( void );返回的是一個界於0~32767(0x7FFF)之
間的偽隨機數,包括0和32767。注意,這里產生的是偽隨機數,不是真正意
義上的隨機數,看下面的程序:
#include "stdlib.h"
#include "stdio.h"
void main( void )
{
/* Display a number. */
printf( " %6d\n", rand() );
getchar();
}
程序運行的結果是:
346
多次運行這個程序,發現每次產生的結果都是346(不同的機器可能產生
的結果不一樣),這就是所謂的偽隨機數。偽隨機數是通過一個公式來運算
出來的,所以,每次產生的偽隨機數都一樣。那麼,如何才能產生真正意義
上的隨機數呢?這就有一個隨機種子的問題。在C語言標准函數庫中,有這
么一個函數:
void srand( unsigned int seed );
在《The c programming language》中對這個函數是這樣描述的:
srand uses seed(函數變數聲明中的seed) as the seed(隨機函數中種子
的意思) for a new sequence of pseudo-random numbers. The
initial seed is 1.
所以,要產生真正意義上的隨機數,那麼就要求每次提供的種子不一樣,一
般情況下,都設置時間為隨機函數的種子。看下面的一段程序:
/* RAND.C: This program seeds the random-number generator
* with the time, then displays 10 random integers.
*/
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
void main( void )
{
int i;
/* Seed the random-number generator with current time so that
the numbers will be different every time we run.
將當前時間設置成隨機函數的種子,所以每次產生的數都不一樣
*/
srand( (unsigned)time( NULL ) );
/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( 「 %6d\n」, rand() );
}
Output
6929
8026
21987
30734
20587
6699
22034
25051
7988
10104
每次運行這個程序,產生的隨機數都不一樣,這樣就達到了隨機數的要求了
⑩ C語言求有關隨機排列的演算法,要求是八個人分別隨機對應8個數字,求高手
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define NUM 8
void Rand(int *array, int num)
{
int *table = new int[num];
int i;
for(i=0; i<num; i++) table[i] = 0;
int finsh = 0, r;
while(finsh < num)
{
r = rand() % num;
if(table[r]) continue;
array[finsh++] = r;
table[r] = 1;
}
delete [] table;
}
void main()
{
srand(time(NULL));
int person[NUM];
Rand(person, NUM);
for(int i = 0; i<NUM; i++) printf("%d\t", person[i]);
}