本篇包含:
1、1031-时间转换
2、1032-温度转换
3、1033-计算机内存
4、1034-[NOIP2017]成绩
5、1035-KiKi的最高分
6、1036-组队比赛
7、1037-平方根
8、1038-长方体
9、1039-使徒袭来
10、1040-白兔的分身术
本篇包含考点:
1、小时、分钟和秒的转换
2、标准化格式输出
3、计算机内存转换
4、百分比和小数的转换
5、求平方根
6、数学换元
7、高中均值不等式
8、思维题
1031-时间转换
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int second;cin>>second;int h=0,m=0,s=0;if(second>=60*60){h=second/3600;second=second%3600;}if(second>=60){m=second/60;second=second%60;}s=second;cout<<h<<' '<<m<<' '<<s;
}
解析:
1小时等于60分钟,1分钟等于60秒
读者可以先通过转化为小时,再转化为分钟,再转化为妙,也可以和笔者一样,取除再取模
1032-温度转换
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){float c;cin>>c;float w=5/9.0*(c-32);printf("%.3f",w);
}
解析:
注意温度转换中的除法,要 / 5.0,如果 / 5 可能会出错
1033-计算机内存
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin>>n;cout<<n*262144;
}
解析:
从例子中可知,1M = 262144 个整数
计算方法为:1024*1024 / 4 = 262144
1034-[NOIP2017]成绩
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int a,b,c;cin>>a>>b>>c;cout<<a*0.2+b*0.3+c*0.5;
}
解析:
非常简单的以百分比相乘
1035-KiKi的最高分
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int a[3];for(int i=0;i<3;i++){cin>>a[i];}sort(a,a+3);cout<<a[2];
}
解析:
笔者这里用到了数组,然后用 sort 排序
这题的数据量较小,读者也可以使用多个 if 进行排序判断
1036-组队比赛
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int a,b,c,d;cin>>a>>b>>c>>d;int s[20];s[1]=abs(a+b-c-d);s[2]=abs(a+c-b-d);s[3]=abs(a+d-b-c);s[4]=abs(b+c-a-d);s[5]=abs(b+d-a-c);s[6]=abs(c+d-a-b);sort(s+1,s+6);cout<<s[1]<<endl;
}
解析:
这题的主要思想是:任意两个数和另外两个数相减的绝对值最小值
笔者这里使用了枚举,存于数组中,再用sort排序,取出绝对值的最小值
1037-平方根
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin>>n;cout<<int(sqrt(n));
}
解析:
取一个数字的平方根可以用sqrt()方法
而向下取整要用到强制类型转换 int(),这里读者也可以使用 printf 中的 %d 来限制数据类型
1038-长方体
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){double a,b,c;cin>>a>>b>>c;double x,y,z;z=sqrt(c*b/a);x=c/z;y=b/z;cout<<int((x+y+z)*4);
}
解析:
这题涉及到换元的数学推导
设三个面的面积为 a,b,c,三条边的值为 x,y,z
可得:a=xy,b=xz,c=yz
推导得三个式子
第一式:z=b/x
第二式:x=a/y
第三式:y=c/z
将第二式带入第一式,得到:z=by/a
再将第三式带入上式,得到:z=bc/az
整理得到:z=sqrt(bc/a),z 便求到了
再由 b=xz,得到 x=a/y
再由 c=yz,得到 y=c/z
便得到了所有的边长
再由边长求边长和,(x+y+z)*4
1039-使徒袭来
参考代码:
#include<bits/stdc++.h>
#include <cmath>
using namespace std;
int main(){long long a;cin>>a;printf("%.3f",3*cbrt(a));
}
解析:
设三个数字分别为 x,y,z
根据均值不等式:
x+y+z大于等于 xyz开三次方 再乘以 3
1040-白兔的分身术
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){long long n;cin>>n;cout<<n+1<<endl;
}
解析:
本题是思维结论题:
结论为,只进行一轮的操作得到的 p+k 最大,因此 p=n,k=1,最大值为n+1
如果大家有不懂的,或者文章有何不正,都欢迎评论留言进行讨论或者私信作者