1.16 检验性测试&讲评

1.16 检验性测试&讲评

B2002 Hello,World!

【题目描述】
编写一个能够输出 Hello,World! 的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。

输入样例:无输入
输出样例:Hello,World!

【题解】

#include<cstdio>
int main(){
    printf("Hello,World!");
    return 0;
}

P3954 [NOIP2017 普及组] 成绩

【题目描述】
牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩 ×20%+小测成绩 ×30%+期末考试成绩 ×50%
牛牛想知道,这门课程自己最终能得到多少分。

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

输出格式:
一个整数,即牛牛这门课程的总成绩,满分也是 100 分。

输入输出样例
输入:100 100 80
输出:90

输入:60 90 80
输出:79

【题解】

#include<cstdio>
int main(){
    int a,b,c;
    scanf("%d%d%d", &a, &b, &c);

    int sum=a*0.2+b*0.3+c*0.5;
    printf("%d", sum); 
    return 0;
}

B2049 最大数输出

【题目描述】
输入三个整数,输出最大的数。

输入格式:
输入为一行,包含三个整数,数与数之间以一个空格分开。

输出格式:
输出一行,包含一个整数,即最大的整数。

输入输出样例
输入:10 20 56
输出:56

说明/提示
对于全部的测试点,保证输入的整数均在 32 位有符号整型 (int/long int) 范围内。

【题解】

#include<cstdio>
int main(){
    int a,b,c; 
    scanf("%d%d%d", &a, &b, &c);

    int max=a;
    if(max<b) max=b;
    if(max<c) max=c;
    printf("%d", max);
    return 0; 
} 

P5711 【深基3.例3】闰年判断

【题目描述】
输入一个年份(大于 1582 的整数 ),判断这一年是否是闰年,如果是输出 1,否则输出 0。

输入输出样例
输入:1926
输出:0

输入:1996
输出:1

【题解】
闰年:至1582年后,闰年是指该年年份可以被400整除,或者该年年份可以被4整除但是不能被100整除,也叫做:四年一闰、百年不闰、四百年又闰。

1582年以前是可以被4整除就是闰年,也叫四年一闰。
课外补充:

闰年,指在公历(格里历)或夏历中有闰日的年份,以及在中国旧历农历中有闰月的年份。
地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末(2月29日),使当年的历年长度为366日,这一年就为闰年。 按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。所以规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。闰年的计算,归结起来就是通常说的:四年一闰;百年不闰,四百年再闰;千年不闰,四千年再闰;万年不闰,五十万年再闰。
需要注意的是,现在的公历是根据罗马人的"儒略历"改编而得。
由于当时没有了解到每年要多算出0.0078天的问题,从公元前46年,到16世纪,一共累计多出了10天。为此,当时的教皇格雷果里十三世,将1582年10月5日人为规定为10月15日(这也是为什么1582年少了10天的缘由)。并开始了新闰年规定。此后,平均每年长度为365.2425天,约4年出现1天的偏差。
夏历的平年只有354日,比12个朔望月短0.3671日,为使每月初一与月朔相合,规定每30年中有11年的年底增加1日,这一年的历年有355日,即为闰年。中国旧历农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。

#include<iostream>
using namespace std; 
int main() { 
    int year, flag = 0;
    sacnf("%d", &year);
    if(year%400==0 || (year%4==0 && year%100!=0)){
        flag = 1; 
    }
    printf("%d", flag);
    return 0; 
}

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

【题目描述】
给定 n(n≤10000) 和 k(k≤100),将从 1 到 n 之间的所有正整数可以分为两类:
A 类数可以被 k 整除(也就是说是 k 的倍数),而 B 类数不能。
请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。

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

输入输出样例
输入:100 16
输出:56.0 50.1

【题解】

#include<iostream>
#include<iomanip>
#include<cstdio>
using namespace std;
int main(){
    int n,k,a=0,b=0,sum_a=0,sum_b=0;
    cin>>n>>k;// scanf("%d%d", &n, &k);
    for(int i=1;i<=n;i++){
        if(i%k==0){
            sum_a += i;
            a++;
        }else{
            sum_b += i;
            b++;
        } 
    }
    cout<<fixed<<setprecision(1)<<(double)sum_a/a<<" "<<(double)sum_b/b;
    //printf("%.1lf %.1lf", (double)sum_a/a, (double)sum_b/b);
    return 0;
}

P5724 【深基4.习5】求极差 / 最大跨度值

【题目描述】
给出 n(n≤100) 和 n 个整数 ai (0 ≤ai ≤1000),求这 n 个整数中的极差是什么。
极差的意思是一组数中的最大值减去最小值的差。

输入输出样例
输入

6
1 1 4 5 1 4

输出:4

【题解】

#include<bits/stdc++.h>
using namespace std;
int a[101];
int main(){
    int n; scanf("%d", &n);
    for(int i=0; i<n; i++) scanf("%d", &a[i]);
    sort(a, a+n);
    printf("%d", a[n-1]-a[0]);
    return 0;
}

P1008 [NOIP1998 普及组] 三连击

【题目描述】
将 1,2,...,9 共 9 个数分成 3组,分别组成 3个三位数,且使这 3个三位数构成 1 : 2 : 3的比例,试求出所有满足条件的 3个三位数。

输入格式

输出格式
若干行,每行 3个数字。按照每行第 1个数字升序排列。

输入输出样例
输入:无
输出:

192 384 576
* * *
...

* * *
(剩余部分不予展示)

【题解】

#include<bits/stdc++.h>
using namespace std;

int main(){
//  本题技巧:打标记
    for(int i=100; i<=333; i++){
        int a=i, b=2*i, c=3*i;

        int num[10]={0};//a[i]=1表示i出现过,0表示未出现
//        memset(num, 0, sizeof(num));//设置为0 
        num[a/100]=1, num[a/10%10]=1, num[a%10]=1; 
        num[b/100]=1, num[b/10%10]=1, num[b%10]=1; 
        num[c/100]=1, num[c/10%10]=1, num[c%10]=1; 

        int sum=0;
        for(int j=1; j<=9; j++){
            sum += num[j];
        }
        if(sum==9) cout<<a<<" "<<b<<" "<<c<<endl;//printf("%d %d %d\n", a, b, c);
    }
    return 0;
}

P1614 爱与愁的心痛

【题目描述】
最近有 n个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。

输入格式:
第一行有两个用空格隔开的整数,分别代表 n和 m。
第 2 到第 (n + 1)行,每行一个整数,第 (i + 1) 行的整数 ai
代表第 i 件事的刺痛值 ai。

输出格式:
输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。

输入样例:

8 3
1
4
7
3
1
2
4
3

输出样例:

6

说明/提示:
数据规模与约定
对于 30% 的数据,保证 n≤20。
对于 60% 的数据,保证 n≤100。
对于 90% 的数据,保证 n≤1e3。
对于 100% 的数据,保证 0≤m≤n≤3×1e3。

【题解】

#include<bits/stdc++.h>
using namespace std;

const int N=1e5;
int a[N];

int main(){
    int n,m,min=0; cin>>n>>m;
    for(int i=1; i<=n; i++){
        cin>>a[i];
        if(i<=m) min += a[i];
    }
    int sum=min;
    for(int i=m+1; i<=n; i++){
        sum = sum+a[i]-a[i-m];//连续 m个数据的 和
        if(min>sum) min = sum;
    }
    cout<<min;
    return 0;
}
posted @ 2021-08-27 23:02  HelloHeBin  阅读(493)  评论(0编辑  收藏  举报