发布网友 发布时间:2022-05-26 14:29
共2个回答
热心网友 时间:2023-10-22 02:41
经过实验,这题目其实没有交代清楚,要想达到题目演示的结果,双休每天下降的值N是不变动,所以B努力提示后,工作日上升值x,休息下降值依然是N。
程序:直接x初值取n,那么B的结果肯定小于A,之后只要循环x每次增加,知道结果不小于A。
按题目说法,这个x肯定不是精确值。(输出的x只要整数)。
你可以通过降低常量AX的值,来调整运算精度!
我下面的代码,备注“//--可删除”的都是调试打印,让你看到运行过程的,你可以删掉。
由于第一天是基值,所以计算天数364天。
#include <stdio.h>
#define B 1.0//第一天基数
#define AX 1//x增值,越小精度越高。
int days[7]={0,1,2,3,4,5,6};
double getSN(int flag,double u,double d);//获得学习结果。flag=1全年不休;flag=0每周双休
//u:每天提升值,d每天下降值。当全年不休u,d都传n。当双休时d传n,u传x
int main()
{
double n,x,sA,sB;
printf("请输入n的值:");
scanf("%lf",&n);
x=n;
printf("(按照每天工作努力值%lf)A全年不休工作的结果:%lf\n",n,getSN(1,n,n));//--可删除
printf("(按照每天工作努力值%lf)B每周双休工作的结果: %lf\n",n,getSN(0,x,n));//--可删除
sA=getSN(1,n,n);
sB=getSN(0,x,n);
while(sB<sA)
{
x+=AX;
sB=getSN(0,x,n);
printf("B尝试努力值增加至%lf\n",x);//--可删除
printf("B增加后的工作结果:%lf\n",sB);//--可删除
}
printf("\nx最终值(整数输出)%d\n",(int)x);
return 0;
}
double getSN(int flag,double u,double d)
{
int cd=364,*p=days;
double s=B;
while(cd--)
{
if(!flag && (*p==6 ||*p==0))
s=s-s*d/1000;
else
s=s+s*u/1000;
if(p==&days[6])
p=days;
else
p++;
}
return s;
}
热心网友 时间:2023-10-22 02:42
源代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,n,x;
while(1)
{
a=1;
b=1;
n=1;
x=1;
printf("请输入A君的努力程度N\n");
scanf("%lf",&n);
a=a*pow(1.0*(1.0 + n/1000),365);
do
{
x=x+1;
b=pow(pow((1.0-n/1000),2),52)*pow(pow((1.0+x/1000),5),53);
}while(b<a);
printf("B君的努力程度应为:%.0lf\n\n\n",x);
}
}
运行效果和代码截图如下: