当前位置:首页 » 编程语言 » C语言随机算法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言随机算法

发布时间: 2023-01-22 17:21:12

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]);
}