永发信息网

用C++写一个算法。有4个等级的玩家,每种玩家进一次游戏就会随机获得或减少一定的分数,最终的目的是

答案:2  悬赏:0  手机版
解决时间 2021-04-24 04:34
用C++写一个算法。有4个等级的玩家,每种玩家进一次游戏就会随机获得或减少一定的分数,最终的目的是达到3000分就算成功。要求:第一个等级的玩家很容易就能达到3000分,第二个等级的玩家要重复很多次才能达到3000分,第三个等级的玩家是感觉有希望能达到3000分,但实际却是没法达到,第四个等级的玩家直接就能知道,无论进多少次游戏,都没法完成。注意,玩家的每次的分数不能只增不减或只减不增。急。。。帮帮忙,兄弟!
最佳答案
完整代码如下:
编译器:VS2012.
原理:生成随机数,从随机数分布概率着手设定达标速度与胜率.现在的胜率设置比较极端,请自行调整。
#include
#include
using namespace std;int randNum(int rangeMin,int rangeMax)
{
 return static_cast(rand())/(RAND_MAX+1)*(rangeMax-rangeMin+1)+rangeMin; 
}int main()
{
 const int member = 4;
 int player[member] = {0};
 int turn[member] = {0};
 int cnt = 0;
 bool state = false;
 while(cnt < 100000)
 {
  for(int i=0;i!=member;i++)
  {
   switch (i)
   {
   case 0:
    {
     if(player[i] > 3000)
      break;
     player[i]+=randNum(-1,400);
     turn[i]++;
     break;
    }
   case 1:
    {
     if(player[i] > 3000)
      break;
     player[i]+=randNum(-50,100);
     turn[i]++;
     break;
    }
   case 2:
    {
     if(player[i] > 3000 || player[i] < 2100000000)//21E
      break;
     player[i]+=randNum(-100,1);
     turn[i]++;
     break;
    }
   case 3:
    {
     if(!state)
      cout << "P4你必然无法到达目标分数."<< endl;
     else
      break;
     state = true;
     break;
    }
   }
  }
  cnt++;
 }
 cout << endl;
 cout << "运行游戏:" << cnt << "次" << endl;
 for(int i=0;i!=member-1;i++)
 {
  cout << "第" << turn[i] <<"回,P"<< i+1
    << (player[i]>=3000?"达到目标点数3000点.":"还是无法达到目标点数3000点.") << endl;
 }
 return 0;
}
全部回答
几乎所有的程序员都写过类似于“洗牌”的算法,也就是将一个数组随机打乱后输出,虽然很简单,但是深入研究起来,这个小小的算法也是大有讲究。我在面试程序员的时候,就会经常让他们当场写一个洗牌的函数,从中可以观察到他们对于这个问题的理解和写程序的基本功。 在深入讨论之前,必须先定义出一个基本概念:究竟洗牌算法的本质是什么?也就是说,什么样的洗牌结果是“正确”的? 云风曾经有一篇博文,专门讨论了这个问题,他也给出了一个比较确切的定义,在经过洗牌函数后,如果能够保证每一个数据出现在所有位置的概率是相等的,那么这种算法是符合要求的。在这个前提下,尽量降低时间复杂度和空间复杂度就能得到好的算法。 第一个洗牌算法: 随机抽出一张牌,检查这张牌是否被抽取过,如果已经被抽取过,则重新抽取,直到找到没被抽出过的牌,然后把这张牌放入洗好的队列中,重复该过程,直到所有的牌被抽出。 大概是比较符合大脑对于洗牌的直观思维,这个算法经常出现在我遇到的面试结果中,虽然它符合我们对于洗牌算法的基本要求,但这个算法并不好,首先它的复杂度为o(n2),而且需要额外的内存空间保存已经被抽出的牌的索引。所以当数据量比较大时,会极大降低效率。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么我在家却高兴不起来
湖北哪里有大的戴尔售后服务中心
歌词里面有那句谢谢你当我的港湾的歌是
毕节到昆明过路费多少,云南昆明到贵州省兴义
我在家玩劲舞团一进大厅就掉,是怎么了?
小贝 为什么还不出现
骨髓液是什么
吸血鬼骑士什么时候能完结?我要崩溃啦
北京往返美国机票
怎么去南宁五里亭批发市场?
象转坝在哪里啊,我有事要去这个地方
青云天书加点
关于马的文学作品有哪些??
树有心眼猜十个字谜底
女生的第一次是不是不会怀孕?
推荐资讯
女人20-30各个年龄段怎么称呼?
载歌载舞的意思是什么,翩翩起舞的意思意思是
谁有轩辕剑5外传详细的攻略
电脑配置有什么特殊含义? 为什么配置不好电
求焕我精彩广告的主题曲!
同时使用会员和超级QQ的第一个月的QQ等级加速
7 X
脾胃不好的症状有哪些表现?
阳泉建成区是什么地方,‘建城区’是什么意思
我的问问积分怎么成负值了。经验也有所减少?
给男朋友打电话,他让别的女人接是什么意思?
武汉地区事业单位退休职工安葬以及抚恤费是否
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?