P3954 [NOIP2017 普及组] 成绩
题意
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
思路
1.照题意做
坑点
无
算法一:
实现步骤
- 输入三门成绩
- 照题意输出
- 输出总成绩
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a,b,c;
int m;
cin>>a>>b>>c;
m=0.2*a+0.3*b+0.5*c;
cout<<m;
return 0;
}
总结
基础题 无难度
P7760 [COCI2016-2017#5] Tuna
题意
渔夫捕到 N 条金枪鱼。对于每一条鱼,平台会给出两个估测值p1和p2。如果这两个值之差不超过 X,则取较大的值作为该条鱼的价值;否则如果差超过X,则取另一个值p3。现在给定 N 条鱼的值(可能会有 2 个或 3 个),求所有鱼的总价值。
思路
- 比较p1和p2相差值是否在x范围内,在的话把最大值累加 不在的话加上p3
坑点
p1和p2不知道谁大谁小 要分开讨论
算法一:
实现步骤
- 输入鱼个数n和相差最大值x
- 输入p1,p2,比较大小
- 累加输出总价值
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,x;
cin>>n;
cin>>x;
int sum=0;//累加
for(int i=1;i<=n;i++)
{
int p1,p2,p3;
cin>>p1>>p2;
if(p1<p2){
if(p2-p1<=x)//如果p2比p1大
{
sum+=p2;将大的累加
}
else{
cin>>p3;
sum+=p3;
}
}
else{
if(p1-p2<=x)//如果p1比p2大
{
sum+=p1;
}
else{
cin>>p3;
sum+=p3;
}
}
}
cout<<sum;输出总价值
return 0;
}
算法二:
实现步骤
- 输入鱼个数n和相差最大值x
- p1,p2相差绝对值,与x比较大小
- 在x范围内 将p1和p2最大值累加
- 在x范围外 将p3累加到ans上
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x;
cin>>n>>x;
int ans=0;
for(int i=1;i<=n;i++)
{
int p1,p2,p3;
cin>>p1>>p2;
if(abs(p1-p2)<=x)//abs绝对值
{
ans+=max(p1,p2);//max取大值
}
else{
cin>>p3;
ans+=p3;
}
}
cout<<ans;
return 0;
}
总结
基础题
P8752 [蓝桥杯 2021 省 B2] 特殊年份
题意
今年是 2021 年,2021 这个数字非常特殊, 它的千位和十位相等, 个位比百位大 1,我们称满足这样条件的年份为特殊年份。输入 5 个年份,请计算这里面有多少个特殊年份。
思路
- 用for循环输入五个年份
- 计算出个位十位百位千位
- 找出千位和十位相等, 个位比百位大 1的年份 累加
坑点
如何找出个位十位百位千位
算法一:
实现步骤
- 输入五个年份
- 计算出个位十位百位千位
- 找出千位和十位相等, 个位比百位大 1的年份
- 把符合条件的累加起来
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n[6];
int sum=0;
for(int i=1;i<6;i++)
{
cin>>n[i];
int a,b,c,d;
a=n[i]%10;//个位
b=n[i]%100/10;//十位
c=n[i]%1000/100;//百位
d=n[i]/1000;//千位
if(d==b&&a-c==1)
{
sum++;
}
}
cout<<sum;
return 0;
}
算法二:
实现步骤
- 输入字符串s 一维数组
- 把符合条件的累加起来
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s[6];
int ans=0;
for(int i=0;i<5;i++)
{
cin>>s[i];
if(s[i][0]==s[i][2]&&s[i][3]-s[i][1]==1)
{
ans++;
}
}
cout<<ans;
return 0;
}
总结
取余 一维数组 基础题
P1104 生日
题意
照年龄从大到小的顺序排序 年月日相同输入靠后的同学先输出
思路
1.运用结构体知识
坑点
无
算法一:
实现步骤
- 首先为结构体实现两个构造函数:
- 照题意比大小
- 输出顺序
代码
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct name{
int y,m,d;//年月日
string s;//姓名
int c;//序号
}num[105];
bool cmp(name a,name b)
{
if(a.y!=b.y)//年份不同
{
return a.y<b.y;
}
else{
if(a.m!=b.m)//月份不同
{
return a.m<b.m;
}
else//月份相同
{
if(a.d!=b.d)//日不同
{
return a.d<b.d;
}
else//日相同
{
return a.c>b.c;
}
}
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>num[i].s>>num[i].y>>num[i].m>>num[i].d;
num[i].c=i;
}
sort(num+1,num+n+1,cmp);
for(int i=1;i<=n;i++)
{
cout<<num[i].s<<endl;
}
return 0;
}
总结
结构体基础题
P5723 【深基4.例13】质数口袋
题意
他从 22开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,装的质数的和不能超过 L。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。
思路
1.将每个数都建立旗帜flag=0;是素数的数赋予flag=1 最后将flag=0的数累加与L比大小
坑点
素数从2开始
算法一:
实现步骤
- 将每个数都建立旗帜flag=0
- 是质数的数赋予flag=1
- 将flag=0的数累加与L比大小
- 输出符合条件的质数与质数个数
代码
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int l;
int sum=0;//表示质数累加
int cnt=0;//表示质数个数累加
cin>>l;
for (int i=2;i<=l;i++)
{
int flag=0;//立旗帜
for(int j=2;j<i;j++)
{
if(i%j==0)
{
flag=1;//将不是质数的标为1
}
}
if(flag==0)//是质数
{
sum+=i;
if(sum>l){
break;
}
cnt++;
cout<<i<<endl;
}
}
cout<<cnt;
return 0;
}
算法二:
实现步骤
- 首先将质数定义为true 将非质数定义为false
- 将true的数累加与L比大小
- 输出符合条件的质数与质数个数
代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<math.h>
using namespace std;
bool xu(int n)
{
if(n==2)
{
return true;
}
else
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
}
int main()
{
int n;
cin>>n;
int sum=0;
int ans=0;
for(int i=2;i<=100005;i++)
{
if(xu(i))
{
sum+=i;
if(sum>n)break;
cout<<i<<endl;
ans++;
}
}
cout<<ans;
return 0;
}
总结
需动脑