某公司笔试题中一个关于随机数的题

dreamhunter_lan 2012-10-29 11:45:22
A、B、C、D、E代表4种技能,一种技能对应一定的数字,刚开始都一样:A=20,B=20,C=20,D=20,E=20。使用一种技能会引起这些数值变化,例如使用B以后,A=15,B=25,C=18,D=20,E=22。就是要求变化的A、B、C、D、E都要在[15, 35]这个范围之间,而且A+B+C+D+E=100不变,还要求变化尽量随机。

大概就是这样吧,没啥思路。
...全文
326 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Prairial_0 2012-11-03
  • 打赏
  • 举报
回复
首先随机打乱A,B,C,D,E,然后依次对A,B,C,D,E在约束范围内随机取值
  • 打赏
  • 举报
回复
上面的数个行代码 这下可以了

public class Test {
public static void main(String[] args) {
int a[] = { 20, 20, 20, 20, 20 };
int b = 0;
while (true) {
for (int i = 0; i < 5; i++) {
int j = Math.round((int) (Math.random() * 10));
if (j % 2 == 0) {
a[i] = a[i] + Math.round((int) (Math.random() * 15));
} else {
a[i] = a[i] - Math.round((int) (Math.random() * 5));
}
}
if (((a[0] + a[1] + a[2] + a[3] + a[4]) == 100)
&& ((a[0] > 14 && a[0] < 36) && (a[1] > 14 && a[1] < 36)
&& (a[2] > 14 && a[2] < 36)
&& (a[3] > 14 && a[3] < 36) && (a[4] > 14 && a[4] < 36))) {
break;
}
a[0]=20;a[1]=20;a[2]=20;a[3]=20;a[4]=20;
}
for (int i : a) {
System.out.println(i);
}
}
}
  • 打赏
  • 举报
回复

public class Test {
public static void main(String[] args) {
int a[] = { 20, 20, 20, 20, 20 };
int b = 0;
while (true) {
for (int i = 0; i < 5; i++) {
int j = Math.round((int) (Math.random() * 10));
if (j % 2 == 0) {
a[i] = a[i] + Math.round((int) (Math.random() * 15));
} else {
a[i] = a[i] - Math.round((int) (Math.random() * 5));
}
}
if (((a[0] + a[1] + a[2] + a[3] + a[4]) == 100)
&& ((a[0] > 14 && a[0] < 36) && (a[1] > 14 && a[1] < 36)
&& (a[2] > 14 && a[2] < 36)
&& (a[3] > 14 && a[3] < 36) && (a[4] > 14 && a[4] < 36))) {
break;
}
}
for (int i : a) {
System.out.println(i);
}
}
}

随机数的问题运行不出和正好是100的。。。
henry_zlh 2012-10-30
  • 打赏
  • 举报
回复
#define MAX_NUM 21
henry_zlh 2012-10-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<time.h>
#include<stdlib.h>


int get_num(int arr[], int len)
{
int i,m,cnt=0;
int total = 100;

for(i=0;i<len-1;){
m = rand()%MAX_NUM + 15;
if( (total-m)/(len-1-i)>=15){
total-=m;
arr[i] = m;
i++;
}
}
arr[i] = total;
return 0;
}


void show_arr(int arr[], int len)
{
int i;
int cnt=0;
for(i=0;i<len-1;i++){
printf("[%2d]+",arr[i]);
cnt+=arr[i];
}
cnt+=arr[i];
printf("[%2d]=[%3d]\n",arr[i], cnt);
}


int main()
{
int n = 20;
int arr[5]={0};
int len = 5;
srand((int)time(0));
for(;n>0;n--){
get_num(arr, len);
show_arr(arr,len);
}
return 0;
}

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧