7-13 日K蜡烛图 (15 分)
https://pintia.cn/problem-sets/14/problems/793
AC代码:
1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 using namespace std; 5 int main() 6 { 7 double open,high,low,close; 8 scanf("%lf %lf %lf %lf",&open,&high,&low,&close); 9 if(open>close) printf("BW-Solid"); 10 else if(open==close) printf("R-Cross"); 11 else printf("R-Hollow"); 12 if((high>open&&high>close)&&(low<open&&low<close)) printf(" with Lower Shadow and Upper Shadow\n"); 13 else if(high>open&&high>close) printf(" with Upper Shadow\n"); 14 else if(low<close&&low<open) printf(" with Lower Shadow\n"); 15 return 0; 16 }
7-18 二分法求多项式单根 (20 分)
https://pintia.cn/problem-sets/14/problems/798
AC代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 using namespace std; 6 double fal(double a3,double a2,double a1,double a0,double x) 7 { 8 double value=a3*x*x*x+a2*x*x+a1*x+a0; 9 return value; 10 } 11 int main() 12 { 13 double a3,a2,a1,a0,x; 14 double low,high,mid; 15 double threshold=0.001; 16 double value1,value2,value3; 17 scanf("%lf %lf %lf %lf",&a3,&a2,&a1,&a0); 18 scanf("%lf %lf",&low,&high); 19 while(high-low>=threshold) 20 { 21 value1=fal(a3,a2,a1,a0,low); 22 value2=fal(a3,a2,a1,a0,high); 23 if(value1*value2==0){ 24 if(value1==0){ 25 printf("%.2f\n",low); 26 break; 27 } 28 else if(value2==0) 29 { 30 printf("%.2f\n",high); 31 break; 32 } 33 } 34 else{ 35 if(value1*value2<0) 36 { 37 mid=(high+low)/2; 38 value3=fal(a3,a2,a1,a0,mid); 39 if(value3==0) 40 { 41 printf("%.2f\n",mid); 42 break; 43 } 44 else if(value1*value3<0) high=mid; 45 else if(value2*value3<0) low=mid; 46 } 47 else if(value1*value2>0) break; 48 } 49 } 50 if(high-low<threshold){ 51 // if(fal(a3,a2,a1,a0,low)==0) printf("%.2lf\n",low); 52 //else if(fal(a3,a2,a1,a0,high)==0) printf("%.2lf\n",high); 53 printf("%.2f\n",(low+high)/2); 54 } 55 return 0; 56 }
我日,这题卡了我好久,前面几次提交都是部分正确,没有考虑当端点函数值为0的情况,后来在while循环中加了个条件判断,再提交竟然没答案输出,然后我在想是不是double类型输入输出格式问题,改了还是答案不输出,提交报WA,然后我调试一下,发现value1和value2值根本就不对,说明程序一开始求函数值就错了,然后我就没用pow函数,而是直接让pow(x,3)表示成x*x*x,再输出,居然AC。提交也满分了,然后上网百度pow函数的用法,这是我搜到的:
如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。 如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。 如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。 如果返回值 ret 太大或者太小,将会导致 range error 错误