不对,重表达一下,不能用有效数字 随机生成这样一个式子:A * B = C 要求: A*B==C && C/A=B && C/B==A A必须是小数\ B必须是整数\ ABC中整数的位数不得超过四;小数去掉小数点后的数字个数也不能超过四
double A = 5.0; double C = 5.0; int B = 5; do { A=double(rand())/double(RAND_MAX); C=1.0+double(rand())/double(RAND_MAX)*3.0; B=int(C/A); }while (!(A >= 1.0 && A <= 4.0 && B >= 1 && B <= 4 && C >= 1.0 && C <= 4.0)); CString ls; ls.Format("%f * %d = %f",A,B,C); this->m_Edit.SetWindowText(ls);
修改一下double A = 5.0; double C = 5.0; int B = 5; do { A=1.0+double(rand())/double(RAND_MAX)*3.0; B=(int)(1.0+double(rand())/double(RAND_MAX)*3.0); C=A*B; }while (!(A >= 1.0 && A <= 4.0 && B >= 1 && B <= 4 && C >= 1.0 && C <= 4.0)); CString ls; ls.Format("%f * %d = %f",A,B,C); this->m_Edit.SetWindowText(ls);
C=1.0+double(rand())/double(RAND_MAX)*3.0;
B=int(C/A);
A=0.62797936948759我最后要的结果是A*B==C&&C/A=B&&C/B==A
&&
A必须是小数\
B必须是整数\
A、B、C有效数字不大于四且最少为一.
随机生成这样一个式子:A * B = C
要求:
A*B==C && C/A=B && C/B==A
A必须是小数\
B必须是整数\
ABC中整数的位数不得超过四;小数去掉小数点后的数字个数也不能超过四
double C = 5.0;
int B = 5;
do
{
A=double(rand())/double(RAND_MAX);
C=1.0+double(rand())/double(RAND_MAX)*3.0;
B=int(C/A);
}while (!(A >= 1.0 && A <= 4.0 &&
B >= 1 && B <= 4 &&
C >= 1.0 && C <= 4.0)); CString ls;
ls.Format("%f * %d = %f",A,B,C);
this->m_Edit.SetWindowText(ls);
——你这个命题有问题:
A必须是小数,又要C/B==A,在VC中小数可用float/double来表示,但判断两个浮点数是否相等是不能直接用==判断的,只能是小于一定精度范围:
const double DECISION = 10e-6;
abc(C/B-A)<=DECISION是否满足以下条件即可:
C/A=B
A必须是小数\
B必须是整数\
A、B、C有效数字不大于四且最少为一.
double C = 5.0;
int B = 5;
do
{
A=1.0+double(rand())/double(RAND_MAX)*3.0;
B=(int)(1.0+double(rand())/double(RAND_MAX)*3.0);
C=A*B;
}while (!(A >= 1.0 && A <= 4.0 &&
B >= 1 && B <= 4 &&
C >= 1.0 && C <= 4.0)); CString ls;
ls.Format("%f * %d = %f",A,B,C);
this->m_Edit.SetWindowText(ls);