P5735 【深基7.例1】距离函数
题目描述
给出平面坐标上不在一条直线上三个点坐标 (x1,y1),(x2,y2),(x3,y3),坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。
对于平面上的两个点 (x1,y1),(x2,y2),则这两个点之间的距离 dis=(x2−x1)2+(y2−y1)2。
输入格式
输入三行,第 i 行表示坐标 (xi,yi),以一个空格隔开。
输出格式
输出一个两位小数,表示由这三个坐标围成的三角形的周长。
输入输出样例
输入 #1复制
0 0
0 3
4 0
输出 #1复制
12.00
说明/提示
数据保证,坐标均为实数且绝对值不超过 100,小数点后最多仅有 3 位。
实现代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
double fun(double a,double b,double c,double d){
double x=(a-c)*(a-c)+(b-d)*(b-d);
return sqrt(x);
}
int main(){
double a,b,c,d,e,f;
cin>>a>>b;
cin>>c>>d;
cin>>e>>f;
double t1=fun(a,b,c,d);
double t2=fun(a,b,e,f);
double t3=fun(c,d,e,f);
printf("%.2lf",t1+t2+t3);
return 0;
}
P5736 【深基7.例2】质数筛
题目描述
输入 n 个不大于 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。
输入格式
第一行输入一个正整数 n,表示整数个数。
第二行输入 n 个正整数 ai,以空格隔开。
输出格式
输出一行,依次输出 ai 中剩余的质数,以空格隔开。
输入输出样例
输入 #1复制
5
3 4 5 6 7
输出 #1复制
3 5 7
说明/提示
数据保证,1≤n≤100,1≤ai≤105。
实现代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,t;
int s[N];
int fun(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int main(){
cin>>n;
int x=1;
for(int i=1;i<=n;i++){
cin>>t;
if(t>=2&&fun(t)==1){
s[x++]=t;
}
}
for(int i=1;i<x;i++){
cout<<s[i]<<" ";
}
return 0;
}
P5737 【深基7.例3】闰年展示
题目描述
输入 x,y,输出 [x,y] 区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。
输入格式
输入两个正整数 x,y,以空格隔开。
输出格式
第一行输出一个正整数,表示 [x,y] 区间中闰年个数。
第二行输出若干个正整数,按照年份单调递增的顺序输出所有闰年年份数字。
输入输出样例
输入 #1复制
1989 2001
输出 #1复制
3
1992 1996 2000
说明/提示
数据保证,1582≤x<y≤3000。
实现代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,t;
int s[N];
int fun(int x){
if(x%100!=0&&x%4==0||x%400==0){
return 1;
}
return 0;
}
int main(){
int x=1,sum=0;
cin>>n>>t;
for(int i=n;i<=t;i++){
if(fun(i)==1){
s[x++]=i;
sum++;
}
}
cout<<sum<<endl;
for(int i=1;i<=sum;i++){
cout<<s[i]<<" ";
}
return 0;
}
P5738 【深基7.例4】歌唱比赛
题目描述
n(n≤100) 名同学参加歌唱比赛,并接受 m(m≤20) 名评委的评分,评分范围是 0 到 10 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 m−2 个评分的平均数。请问得分最高的同学分数是多少?评分保留 2 位小数。
输入格式
第一行两个整数 n,m。
接下来 n 行,每行各 m 个整数,表示得分。
输出格式
输出分数最高的同学的分数,保留两位小数。
输入输出样例
输入 #1复制
7 6
4 7 2 6 10 7
0 5 0 10 3 10
2 6 8 4 3 6
6 3 6 7 5 8
5 9 3 3 8 1
5 9 9 3 2 0
5 8 0 4 1 10
输出 #1复制
6.00
实现代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,t;
int s[N][N];
int main(){
double sum,ma=0;
int minn,maxn;
cin>>n>>t;
for(int i=1;i<=n;i++){
sum=0;
minn=10,maxn=0;
for(int j=1;j<=t;j++){
cin>>s[i][j];
sum+=s[i][j];
minn=min(minn,s[i][j]);
maxn=max(maxn,s[i][j]);
}
sum=(sum-minn-maxn)/(t-2);
ma=max(ma,sum);
}
printf("%.2lf",ma);
return 0;
}
P5739 【深基7.例7】计算阶乘
题目描述
求 n!,也就是 1×2×3⋯×n。
挑战:尝试不使用循环语句(for、while)完成这个任务。
输入格式
第一行输入一个正整数 n。
输出格式
输出一个正整数,表示 n!。
输入输出样例
输入 #1复制
3
输出 #1复制
6
说明/提示
数据保证,1≤n≤12。
实现代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,t;
int s[N][N];
int main(){
cin>>n;
int sum=1;
for(int i=1;i<=n;i++){
sum=sum*i;
}
cout<<sum;
return 0;
}