欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

2023年 3月 GESP C++ 一级真题解析 编程题

时间:2024-05-02 10:24 作者:fangys 点击:
三、编程题(每题 25 分,共 50 分) 1. 每月天数 【问题描述】 小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗

三、编程题(每题 25 分,共 50 分)

1. 每月天数

【问题描述】

小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗?

【输入描述】

输入一行,包含两个整数,分别表示一个日期的年、月。

【输出描述】

输出一行,包含一个整数,表示输入月份有多少天。

【样例输入 1】

2022 1

【样例输出 1】

31

【样例输入 2】

2020 2

【样例输出 2】

29


【题目大意】条件判断问题,主要分清平年和闰年,平年 2 月 28 天,闰年 2 月29 天,其余按照大小月取分,输出对应的天数。

【考纲知识点】基本数据类型、控制语句结构、输入输出语句、变量的定义与使用(一级)

【解题思路】

1.定义变量:年份 y、月份 m 为 int 类型、判断是否为闰年的 bool 类型 leap 并赋值为 false(一开始让它为平年);

2.输入年份、月份;

3.判断是否为闰年,如果是 400 的倍数,或者是 4 的倍数但不是 100 的倍数,就是闰年,将 leap 改为 true;

4.判断是否为大月:1、3、5、7、8、10、12 月为大月,输出 31;小月:4、6、9、11 月为小月,输出 30;如果不是大月也不是小月,看下是否为闰年,闰年输出 29,否则输出 28。


【参考程序】

#include <iostream>
using namespace std;
int main(){
    int n,y;
    cin>>n>>y;
    switch(y){
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:
            cout<<31;
            break;
        case 4:case 6:case 9:case 11:
            cout<<30;
            break;
        default:
            if(n%4==0&&n%100!=0||n%400==0) cout<<29;
            else cout<<28;
    }
    return 0;
}

【洛谷链接】 https://www.luogu.com.cn/problem/B3835

2. 长方形面积

【问题描述】

小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?

如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。

【输入描述】

输入一行,包含一个整数,表示长方形的面积。约定 2 ≤ A ≤ 1000。

【输出描述】

输出一行,包含一个整数,表示有种可能的长方形。

【样例输入 1】

4

【样例输出 1】

2

【样例解释 1】

2 种长方形面积为 4,它们的长宽分别为 2 x 2,4 x 1。

【样例输入 2】

6

【样例输出 2】

2

【样例解释 2】

2 种长方形面积为 6,它们的长宽分别为 3 x 2,6 x 1。


【题目大意】统计长方形的个数。两个长方形的长和宽相等算一种情况,所以规定长大于宽;长和宽相等是正方形,是长方形的特例,算一种情况。统计完个数之后输出。

【考纲知识点】变量的定义与使用、控制语句、基本运算、输入输出语句(一级)

【解题思路】

1.定义变量:面积 area、计数变量 cnt、宽 w;

2.利用循环列举所有宽的可能性,从 1 开始,到宽*宽小于等于面积即可,后面大于宽的就是长了,和前面统计过的算一种情况,所以不用往后遍历。

3.每次循环判断面积对宽取余是不是为 0,如果为 0,说明长、宽都是整数,满足题意,计数变量 cnt++;

4.for 循环结束后输出计数变量 cnt。


【参考程序】

#include <iostream>
using namespace std;
int main(){
    int s;
    cin>>s;
    int c=0;
    for(int i=1;i*i<=s;i++){
        if(s%i==0) c++;
    }
    cout<<c;
    return 0;
}

【洛谷链接】 https://www.luogu.com.cn/problem/B3834

(责任编辑:admin)
    顶一下
    (1)
    100%
    踩一下
    (0)
    0%