关于网友提出的“ 仿抢红包算法,求助各位大神T T”问题疑问,本网通过在网上对“ 仿抢红包算法,求助各位大神T T”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 仿抢红包算法,求助各位大神T T
描述:
#include
#include
#include
#include
#define MaxSize 100
////////////////////////////////////////////////////////
//抢红包
void Money(double *&p,int j,int m1)
{
int step=0,k,pmax,i=0; //计数step,红包金额k,限定值s,红包金额上限max
double min=0.01,max,s,k1;
while( step<>
{
s=(double)(j-step)/2;
max=(double)(m1-i)/s;
pmax=(int)(max*100);
k1=(double)(rand()%pmax+1); //金额范围1~max
k=(int)(k1/100);
k= k>0 ? k : 1;
p[step]=k*min;
i+=k;
step++;
}
}
////////////////////////////////////////////////////////
void main()
{
ofstream oflie("E:\\红包测试.txt");
srand((unsigned)time(NULL));
int j,m1,q=1,s,flag=1,i=0; // 红包份数j,抢红包轮数q
double m,sl[6]={0}; //sl 验证红包公平性
cout<<"请输入红包份数:";
cin>>j;
while(flag)
{
cout<<"请输入红包总金额(以分为单位):";
cin>>m;
m1=(int) (m*100); //double强制转换int,红包总金额m1
if (m1>=j)
flag=0;
else
cout<<"错误:单个红包金额不可低于0.01元,请重新填写金额。"<<>
cout<<>
}
double *p=new double[j]; //动态申请数组
while(q!=MaxSize+1)
{
Money(p,j,m1);
oflie<<"第"<<>
for(s=0;s<>
{
oflie<<>
sl[s]+=p[s];
}
int i=0;
double luc=0; //第i个为手气最佳luc
for(s=0;s<>
{
if(p[s]>luc)
{
luc=p[s];
i=s+1;
}
}
oflie<
oflie<<"本轮发红包中第"<<><><>
oflie<<>
q++;
}
for(s=0;s<>
{
oflie<<"第"<<>
oflie<<><>
}
delete [] p;
}
这是我写的关于抢红包的程序,但不知道为什么
在【测试小数值】的时候
MaxSize最大只能为50
且第一次运行输入
红包个数j=6.红包总金额=0.06
能运行成功
第二次同样数值的运行就会【停止工作】……
但是测试大数值如j=6,金额=66,
MaxSize目前5000都没问题
吐血T T
解决方案1: 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
以上介绍了“ 仿抢红包算法,求助各位大神T T”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3608968.html