• C++
  • 信奥 周日晚上 蓝桥杯例题精讲

  • @ 2024-5-12 20:32:30

image

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double f(double x){
	return a*x*x*x+b*x*x+c*x+d;
}
int main(){
	cin>>a>>b>>c>>d;
	for(double i=-100;i<100;i++){
		printf("%lf:   %lf   %lf\n",i,f(i),f(i+1));
		if(f(i)*f(i+1)<=0) {
			if(!f(i)) cout<<"@@@"<<fixed<<setprecision(2)<<i<<" ";
			if(f(i)*f(i+1)<0){
				double l=i,r=i+1,mid;
				while(r-l>=0.001){
					mid=(l+r)/2;
					if(f(l)*f(mid)<0) r=mid;
					else l=mid;
				}
				cout<<"@@@";
				cout<<fixed<<setprecision(2)<<l<<" ";
			}
		}
	}
	return 0;
}

image image image

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m,x[30009];
	cin>>n>>m;
	for(int i=0;i<m;i++) cin>>x[i];
	sort(x,x+m);
	int l=0,r=m-1;
	int ans=0;
	while(l<=r){
		if(x[l]+x[r]<=n) l++,r--,ans++;
		else r--,ans++;
	}
	cout<<ans;
	return 0;
}

作业:拼木棒

image image

3 条评论

  • @ 2024-5-18 18:14:13
    主题:一元三次方程求解
    重难点:理解题意,要知道什么事方程,什么是函数。理解求方程的解,就是求函数和x轴的交点的x值。
    
    解题思路:
    1、已知解在-100到100的区间内,且解与解之间的距离大于1,那么我们就可以把-100到100这个区间,分解成200份。
    2、从左往右进行枚举,判断每一个小区间内是否有解(f(左端点)*f(右端点)<=0)。
    3、有解时,整数解直接输出,小数解用二分法把区间缩小到要求的精确度,保留两位小时精确度<0.001。然后输出左端点的值。
    
    作业:(http://101.34.12.22/discuss/6640b6de8092d84db080e5bc#1715517150817)
    1、一元三次方程的注释
    2、纪念品的分组
    3、拼木棒
    
    • @ 2024-5-18 18:13:59
      https://www.bilibili.com/video/BV1yW41167ax/?spm_id_from=333.999.0.0&vd_source=d9062a7be04a38dfcea84b5bbbcdde63
      
      • @ 2024-5-18 17:57:57
        using namespace std;
        double a,b,c,d;//双精度浮点型变量 
        double f(double x){
        	return a*x*x*x+b*x*x+c*x+d;
        }
        int main(){
        	cin>>a>>b>>c>>d;
        	for(double i=-100;i<100;i++){//区间-100到100 
        		printf("%lf:   %lf   %lf\n",i,f(i),f(i+1));
        		if(f(i)*f(i+1)<=0) {//判断有没有解 
        			if(!f(i)) cout<<"@@@"<<fixed<<setprecision(2)<<i<<" ";
        			if(f(i)*f(i+1)<0){//判断是整数解还是非整数解 
        				double l=i,r=i+1,mid;
        				while(r-l>=0.001){// 二分控制精度
        					mid=(l+r)/2;
        					if(f(l)*f(mid)<0) r=mid;
        					else l=mid;
        				}
        				cout<<"@@@";//输出 
        				cout<<fixed<<setprecision(2)<<l<<" ";//输出保留两位小数 
        			}
        		}
        	}
        	return 0;
        }
        
        • 1