大家有没有什么好的办法?

alfredsue 2011-05-03 04:07:30
有三个函数function1()、function2()、function3(),在一次for循环从0到99循环100次的过程中,function1()每两次被调用一下,function2()和function3()没五次被调用一次
现在就想到一个比较笨拙的方法,用一个数组arr[10] = {0,1,2,1,3,1,2,1,1,3},里面的1表示function1(),2表示function2(),3表示function3()根据他们出现的概率插入数组中,然后for循环过程中通过arr[i]判断调用哪个函数,因为数组里面的那个顺序比较麻烦,而且每10次要重新排列一下,所以想请问是不是可以在for循环里面根据i值随机确定调用哪个函数?
各位有何见解的踊跃发表下啊
...全文
155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
alfredsue 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qq675927952 的回复:]

C/C++ code

#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 100.0
int main(int argc, char* argv[])
{

srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子

for (int i=0;i<100;i++)
{
double res = (rand()+0.0)/MAX;//产生0到1的随机数
if(res<=0.5)function1;
else if(res<=0.5+0.2)function2;
else if(res <= 0.5+0.2+0.2) function3;


}
   return 0;
}
[/Quote]
这个不能保证特定的函数在指定回合内必定被调用一次的要求吧?

double res = (rand()+0.0)/MAX;//产生0到1的随机数
if(res<=0.5)function1;

比如这个就不能保证function1()每两次循环中必定有(且只有)一次被调用
qq675927952 2011-05-03
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 100.0
int main(int argc, char* argv[])
{

srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子

for (int i=0;i<100;i++)
{
double res = (rand()+0.0)/MAX;//产生0到1的随机数
if(res<=0.5)function1;
else if(res<=0.5+0.2)function2;
else if(res <= 0.5+0.2+0.2) function3;


}
   return 0;
}


alfredsue 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zyl072 的回复:]

引用 4 楼 alfredsue 的回复:
补充两点:
每次最多只能调用一个函数;
函数在哪次被调用是完全随机的(所以不能认为的制造function1()被全部偶数次调用或者全部基数次调用的情况,除非真的随机到这种巧合)


也就是说,function2,function3 的调用概率为 1/5, function1的调用概率为1/2。 那还是不对啊,
1/5 + 1/5 + 1/……
[/Quote]
我举的那个例子中arr[10]的第一个元素0就表示一个都不调用
alfredsue 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zyl072 的回复:]

引用 4 楼 alfredsue 的回复:
补充两点:
每次最多只能调用一个函数;
函数在哪次被调用是完全随机的(所以不能认为的制造function1()被全部偶数次调用或者全部基数次调用的情况,除非真的随机到这种巧合)


也就是说,function2,function3 的调用概率为 1/5, function1的调用概率为1/2。 那还是不对啊,
1/5 + 1/5 + 1/……
[/Quote]
可以一个也不调用啊
zyl072 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alfredsue 的回复:]
补充两点:
每次最多只能调用一个函数;
函数在哪次被调用是完全随机的(所以不能认为的制造function1()被全部偶数次调用或者全部基数次调用的情况,除非真的随机到这种巧合)
[/Quote]

也就是说,function2,function3 的调用概率为 1/5, function1的调用概率为1/2。 那还是不对啊,
1/5 + 1/5 + 1/2 不为1啊,那剩下的 1/10 的概率应该要调哪个函数呢?
alfredsue 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyl072 的回复:]

引用楼主 alfredsue 的回复:
有三个函数function1()、function2()、function3(),在一次for循环从0到99循环100次的过程中,function1()每两次被调用一下,function2()和function3()没五次被调用一次
现在就想到一个比较笨拙的方法,用一个数组arr[10] = {0,1,2,1,3,1,2,1,1,3},里面的1表示fu……
[/Quote]
1被调用是按两次两次的算,也就是说1/2、3/4、5/6这样,同样,2和3也是按照1/2/3/4/5、6/7/8/9/10这样
alfredsue 2011-05-03
  • 打赏
  • 举报
回复
补充两点:
每次最多只能调用一个函数;
函数在哪次被调用是完全随机的(所以不能认为的制造function1()被全部偶数次调用或者全部基数次调用的情况,除非真的随机到这种巧合)
zyl072 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 alfredsue 的回复:]
有三个函数function1()、function2()、function3(),在一次for循环从0到99循环100次的过程中,function1()每两次被调用一下,function2()和function3()没五次被调用一次
现在就想到一个比较笨拙的方法,用一个数组arr[10] = {0,1,2,1,3,1,2,1,1,3},里面的1表示function1(),2表示function2……
[/Quote]

没看懂, 这个前提成立吗? arr[10] = {0,1,2,1,3,1,2,1,1,3}, 这里 1为啥可以连续出现? 两个2的间隔也不对啊? 另外,0又是只哪个函数?
alfredsue 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wys46 的回复:]

for(i=1;i<=100;i++)
{
if(i%5==0)
{
function2();
function3();
}
else if(i%2==0)
{
function1();
}
i++;
}
[/Quote]
抱歉,忘了补充,,,每次最多只能调用一个函数
wys46 2011-05-03
  • 打赏
  • 举报
回复
for(i=1;i<=100;i++)
{
if(i%5==0)
{
function2();
function3();
}
else if(i%2==0)
{
function1();
}
i++;
}

33,008

社区成员

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

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