C/C++之(四)洛谷刷题基础

简介: C/C++之(四)洛谷刷题基础

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。

唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常!

经历了期末的考核,终于从考试的泥潭里爬了出来,决定出一期洛谷题解,感谢支持!!!  

P3954 [NOIP2017 普及组] 成绩

题目背景

NOIP2017 普及组 T1

题目描述

牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:

总成绩=作业成绩\times 20\%+×20%+小测成绩×30\%+×30%+期末考试成绩\times 50\%×50%

牛牛想知道,这门课程自己最终能得到多少分。

输入格式

三个非负整数 A,B,CA,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是 100100 分。

输出格式

一个整数,即牛牛这门课程的总成绩,满分也是 100100 分。

输入输出样例

输入  

100 100 80  

输出  

90

输入  

60 90 80  

输出  

79

说明/提示

输入输出样例 1 说明

牛牛的作业成绩是 100100 分,小测成绩是 100100 分,期末考试成绩是 8080 分,总成绩是 100 \times 20\%+100 \times 30\%+80 \times 50\%=20+30+40=90100×20%+100×30%+80×50%=20+30+40=90。

输入输出样例 2 说明

牛牛的作业成绩是 6060 分,小测成绩是 9090 分,期末考试成绩是 8080 分,总成绩是 60 \times 20\%+90 \times 30\%+80 \times 50\%=12+27+40=7960×20%+90×30%+80×50%=12+27+40=79。

数据说明

对于 30\%30% 的数据,A=B=0A=B=0。

对于另外 30\%30% 的数据,A=B=100A=B=100。

对于 100\%100% 的数据,0≤A,B,C≤1000≤A,B,C≤100 且 A,B,CA,B,C 都是 1010 的整数倍。

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a,b,c;
  while(cin >> a >> b >> c){
    int sum=0;
    sum=a*0.2+b*0.3+c*0.5;
    cout << a*0.2 << endl;
    cout << b*0.3 << endl;
    cout << c*0.5 << endl;
    cout << sum;
  }
}

这个题目相对来说还是比较简单的,只需要将成绩进行对应的百分比,然后相加即可。

P1425 小鱼的游泳时间

题目描述

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。

这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 2424 小时制计算),它发现自己从 aa 时 bb 分一直游泳到当天的 cc 时 dd 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?

小鱼游的好辛苦呀,你可不要算错了哦。

输入格式

一行内输入 44 个整数,以空格隔开,分别表示题目中的 a, b, c, da,b,c,d。

输出格式

一行内输出 22 个整数 ee 和 ff,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 ff 应该小于 6060。

输入输出样例

输入  

12 50 19 10

输出  

6 20

说明/提示

对于全部测试数据,0\le a,c \le 240≤a,c≤24,0\le b,d \le 600≤b,d≤60,且结束时间一定晚于开始时间。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c,d; 
    cin>>a>>b>>c>>d;
    int x=c-a,y=d-b;//时 分
    if(y<0){
    x--;
    y+=60;
  }
    cout<<x<<" "<<y;
    return 0;
}

此题的主要问题在于理清楚从 a 时 b 分一直游泳到当天的 c 时 d 分,期间小时与分的计算  

P1085 [NOIP2004 普及组] 不高兴的津津

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入格式

输入包括 77 行数据,分别表示周一到周日的日程安排。每行包括两个小于 1010 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式

一个数字。如果不会不高兴则输出 00,如果会则输出最不高兴的是周几(用 1, 2, 3, 4, 5, 6, 71,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

输入输出样例

输入  

5 3

6 2

7 2

5 3

5 4

0 4

0 6

输出  

3

说明/提示

NOIP2004 普及组第 1 题

2021-10-27:增加一组 hack 数据

2022-06-05:又增加一组 hack 数据

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a,b,max=0,day=0;
  int sum=0,i;
  for(i=0;i<7;i++){
    cin >> a >> b;
    sum=a+b;
    if((sum>max)&&(sum>8)){
      max=sum,day=i+1;
    }
  }
  cout << day;
} 

此题只需要计算出哪一天津津上课时间超过8小时,最大,然后输出那天周几

P1909 [NOIP2016 普及组] 买铅笔

题目背景

NOIP2016 普及组 T1

题目描述

P 老师需要去商店买 nn 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 33 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。

商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 nn 支铅笔才够给小朋友们发礼物。

现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 nn 支铅笔最少需要花费多少钱。

输入格式

第一行包含一个正整数 nn,表示需要的铅笔数量。

接下来三行,每行用 22 个正整数描述一种包装的铅笔:其中第 11 个整数表示这种包装内铅笔的数量,第 22 个整数表示这种包装的价格。

保证所有的 77 个数都是不超过 1000010000 的正整数。

输出格式

11 个整数,表示 P 老师最少需要花费的钱。

输入输出样例

输入 #1复制

57

2 2

50 30

30 27

输出 #1复制

54

输入 #2复制

9998

128 233

128 2333

128 666

输出 #2复制

18407

输入 #3复制

9999

101 1111

1 9999

1111 9999

输出 #3复制

89991

说明/提示

铅笔的三种包装分别是:

22 支装,价格为 22;

5050 支装,价格为 3030;

3030 支装,价格为 2727。

P老师需要购买至少 5757 支铅笔。

如果她选择购买第一种包装,那么她需要购买 2929 份,共计 2 \times 29 = 582×29=58 支,需要花费的钱为 2 \times 29 = 582×29=58。

实际上,P 老师会选择购买第三种包装,这样需要买 22 份。虽然最后买到的铅笔数量更多了,为 30 \times 2 = 6030×2=60 支,但花费却减少为 27 \times 2 = 5427×2=54,比第一种少。

对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 22 份,实际的花费达到了 30 \times 2 = 6030×2=60,因此 P 老师也不会选择。

所以最后输出的答案是 5454。

【数据范围】

保证所有的 77 个数都是不超过 1000010000 的正整数。

【子任务】

子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解决一部分测试数据。

每个测试点的数据规模及特点如下表:

上表中“整倍数”的意义为:若为 KK,表示对应数据所需要的铅笔数量 nn —定是每种包装铅笔数量的整倍数(这意味着一定可以不用多买铅笔)。

于 2022 年 12 月 23 日新加 Hack 数据三组。

#include<bits/stdc++.h>
using namespace std;
int n,m,a[10001];
int main()
{
    cin >> n;
    for(int i=1;i<=3;i++){
        m=n;
        int x,y;
        cin >> x >> y;
        while(m>0){
            m-=x;
            a[i]+=y;
        }
    }
    sort(a+1,a+4);
    cout << a[1];
    return 0;
}

这是一道数学相类的题目,计算最少花费的金额

P1089 [NOIP2004 提高组] 津津的储蓄计划

题目描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20\%20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如 1111月初津津手中还有 8383 元,妈妈给了津津 300300 元。津津预计1111月的花销是 180180 元,那么她就会在妈妈那里存 200200 元,自己留下 183183 元。到了 1111 月月末,津津手中会剩下 33 元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据 20042004 年 11 月到 1212 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 20042004 年年末,妈妈将津津平常存的钱加上 20\%20% 还给津津之后,津津手中会有多少钱。

输入格式

12 行数据,每行包含一个小于 350 的非负整数,分别表示 1 月到 12 月津津的预算。

输出格式

一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 -X−X,XX 表示出现这种情况的第一个月;否则输出到 20042004 年年末津津手中会有多少钱。

注意,洛谷不需要进行文件输入输出,而是标准输入输出。

输入输出样例

输入 #1复制

290

230

280

200

300

170

340

50  

90  

80  

200

60  

输出 #1复制

-7  

输入 #2复制

290  

230  

280  

200  

300  

170  

330  

50  

90  

80  

200  

60  

输出 #2复制

1580

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a[12],sum=0,mum=0,i,bound=0;
  for(i=0;i<12;i++){
    cin >> a[i];
  }
  for(i=0;i<12;i++){
    sum=sum+300-a[i];
    if(sum<0){
      cout << "-" << i+1;
      bound=1;
      break;
    }
    mum=mum+sum/100;
    sum=sum%100;
  }
  if(bound==0){
    cout << mum*120+sum;  
  }
}

此题也是一道数学思维的计算题

P5719 【深基4.例3】分类平均

题目描述

给定 nn 和 kk,将从 1 到 nn 之间的所有正整数可以分为两类:A 类数可以被 kk 整除(也就是说是 kk 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 11 位,用空格隔开。

数据保证两类数的个数都不会是 00。

输入格式

输入两个正整数 nn 与 kk。

输出格式

输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。

输入输出样例

输入 #1复制

100 16

输出 #1复制

56.0 50.1

说明/提示

数据保证,1 \leq n\leq 100001≤n≤10000,1 \leq k \leq 1001≤k≤100。

#include<bits/stdc++.h>
using namespace std;
int main(){
  int n,k,a=0,b=0,count1=0,count2=0;
  double average1=0.0,average2=0.0;
  cin >> n >> k;
  for(int i=1;i<=n;i++){
    if(i%k==0){
      a=a+i;
      count1++;
    }
    else{
      b=b+i;
      count2++;
    }
  }
  average1=(double)a/count1;
  average2=(double)b/count2;
  printf("%.1f %.1f",average1,average2);
} 

了,这篇文章到这就结束了,就是一个简简单单的题解,希望可以帮助到大家!!!

👍+✏️+⭐️+🙇‍

相关文章
|
算法 C语言 C++
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
270 0
|
存储 C++
【五一创作】C++刷题 【入门4】数组
【五一创作】C++刷题 【入门4】数组
108 0
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
6月前
|
C语言 C++
【C语言/C++】牛客网刷题训练-12
【C语言/C++】牛客网刷题训练-12
|
6月前
|
存储 自然语言处理 C++
刷题用到的非常有用的函数c++(持续更新)
刷题用到的非常有用的函数c++(持续更新)
84 1
|
存储 C语言 C++
【C/C++刷题——leetcode】查找字符串中最大的子串
【C/C++刷题——leetcode】查找字符串中最大的子串
302 0
|
机器学习/深度学习 人工智能 C++
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
189 0
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
|
存储 算法 C++
【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法
【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法
336 0
|
6月前
|
C++
C++刷题ACM输入数组
C++刷题ACM输入数组
69 0