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 錯誤