有A,B,C三段代码,怎么样才能按照随机顺序执行它们
void A();void B();void C();int main() { int random; srand(some_rand_seed); random = rand(); switch (random % 6) { case 0: A(); B(); C(); break; case 1: B(); C(); A(); break; case 2: C(); A(); B(); break; case 3: A(); C(); B(); break; case 4: B(); A(); C(); break; case 5: C(); B(); A(); break; } return 0;}哈哈,我喜欢简单粗暴的代码!!
■网友
来个Python版的import randomfuncList = random.shuffle(funcList)for f in funcList: f()
■网友
弱弱的说句我不大会c,用php写一个给个思路吧。\u0026lt;?phpfunction a() {\techo "a";}function b() {\techo "b";}function c() {\techo "c";}$arr = array("a", "b", "c");shuffle($arr);foreach ($arr as $v) {\t$v();}
■网友
以 Java 为例我的想法是这样的,题目中虽然说3个函数,但考虑到 N 个函数的情况,就需要一个比较通用的解决方法。先把这些函数丢到一个类里面去,伪代码如下:public class MethodPack{ public static void A(){...} public static void B(){...} public static void C(){...} public static void D(){...}}把N个函数的 Name 以及需要的参数,包装一个类(可以根据需要定制),伪代码如下public class MethodInfo{ public String mMethodName; public Class mParams;}然后对于每个函数的信息取出来生成好,存为一个数组之后就是简单了,随机打乱这个数组顺序,最后通过反射去按照新顺序依次调用一个个函数。------补充----思路就是把函数和一个数组对应起来,然后打乱数组,再按照数组的顺序去调用。具体实现的时候,c的数组可以是函数指针,有反射机制的语言如 Java 都是可以用反射去完成等等~
■网友
以C语言为例,用三个函数指针分别指向 A(), B(), C() 三个函数。每次随机出一个指针执行即可。
■网友
//思路,生成一个0~N的随机序列,通过序列来执行各块代码。//定义一个数组int random= new int;//生成N个数的随机数列public static int randomList(int limit) { int result = new int; for (int i = 0; i \u0026lt; limit; i++){ result = i; } int w; Random rand = new Random(); for (int i = limit - 1; i \u0026gt; 0; i--) { w = rand.nextInt(i); int t = result; result = result; result = t; } return result;\t}//执行每个函数的方法public void doProgram(int n){ switch(n){ case 0: A(); break; case 1: B(); break; case 2: C(); break; ...... case n: N(); break; default: break; }}//上面方法都写完了,下面开始实现random = randomList(N);for(int i = 0;i\u0026lt;N;i++){ doProgram(random(i));}
■网友static void A();static void B();static void C();long long int p = {(long long int)A,(long long int)B,(long long int)C};int main() {\tint count = sizeof(p)/sizeof(long long int);\tsrand((int)time(0));\tfor(int i=0;i\u0026lt;count;i++)\t{\t\tint random= rand()%(count-i);\t\t((void (*)())p)();\t\t//把取到过的置换到后面,下次就不会取到了\t\tlong long int tmp = p;\t\tp = p;\t\tp = tmp;\t}\treturn 0;}
推荐阅读
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 青年|一汽奔腾T77怎么样?车主吐槽:后排座椅太短,和坐小板凳似的
- 怎样对别人的代码进行适当修改使他永远也找不到问题出在哪
- 电商网站支付流程的流失率是怎么样的从用户点击充值/支付按钮,到支付完成,其中每一步的流失比率都是咋样的
- 作为一个服装供应商,怎么样与淘宝卖家沟通才能卖出自己的产品或者拿到订单
- 在丁丁租房工作的感受是怎么样的
- 城市数据团是怎么样一个团队
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 猫扑网南迁广西,媒体唱衰BBS,论坛的未来会怎么样怎样改变
- 被人围攻是怎么样一种体验,包括但不限于(蛋糕,口舌,拳脚,西瓜刀,机枪,code review)
