PTA基础编程题目集一

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 错误

  

猜你喜欢

转载自www.cnblogs.com/jianqiao123/p/11908877.html