202409-1 小杨购物

题目描述

小杨有 ​n 元钱用于购物。商品 A 的单价是 ​a 元,商品 B 的单价是 ​b 元。小杨想购买相同数量的商品 A 和商品 B。

请你编写程序帮助小杨计算出他最多能够购买多少个商品 A 和商品 B。

输入格式

第一行包含一个正整数 ​n,代表小杨用于购物的金额。

第二行包含一个正整数 ​a,代表商品 A 的单价。

第三行包含一个正整数 ​b,代表商品 B 的单价。

输出格式

输出一行,包含一个整数,代表小杨最多能够购买的商品 A 和商品 B 的数量。

样例输入 1

12
1
2

样例输出 1

4

样例输入 2

13
1
2

样例输出 2

4

提示

【样例 1 解释】

对于样例 1,由于需要购买相同数量的两种商品,因此小杨最多能够购买 ​4 件商品 ​A​4 件商品 ​B,共花费 ​1 \times 4 + 2 \times 4 = 12 元。因此,样例 1 的答案为 ​4

【样例 2 解释】

对于样例 1,由于需要购买相同数量的两种商品,因此小杨最多能够购买 ​4 件商品 ​A​4 件商品 ​B,共花费 ​1 \times 4 + 2 \times 4 = 12 元。因此,样例 1 的答案为 ​4。如果小杨想购买 ​5 件商品 ​A 和商品 ​B,则需要花费 ​1 \times 5 + 2 \times 5 = 15 元,超过了小样的预算 ​13 元。因此,样例 2 答案为 ​4

【数据规模与约定】

对全部的测试数据,保证 ​1 \leq n,a,b \leq 10^5

代码解析

枚举法,从 num = 0 开始,逐个判断总花费和预算 n 之间的关系,如果总花费 a * num + b * num 大于预算,说明当前的 num 已经不符合条件,num-1 就是最后一次满足条件的取值

#include<bits/stdc++.h>
using namespace std;
int main() {

    int n, a, b, num = 0;
    cin >> n >> a >> b;
    while(n >= a*num + b*num)
        num++;
    cout << num - 1;
  
    return 0;
}

202409-2 美丽数字

题目描述

小杨有 ​n 个正整数,他认为一个正整数是美丽数字当且仅当该正整数是 ​9 的倍数但不是 ​8 的倍数。

小杨想请你编写一个程序计算 ​n 个正整数中美丽数字的数量。

输入格式

第一行包含一个整数 ​n,代表正整数个数。
第二行有 ​n 个正整数 ​a_1, a_2, \dots a_n

输出格式

输出一个整数,表示其中美丽数字的数量。

样例输入 1

3
1 9 72

样例输出 1

1

提示

【样例 1 解释】

  • ​1 既不是 ​9 的倍数也不是 ​8 的倍数。
  • ​9​9 的倍数不是 ​8 的倍数。
  • ​72 既是 ​9 的倍数又是 ​8 的倍数。

【数据规模与约定】

对全部的测试数据,保证 ​1 \leq n, a_i \leq 10^5

代码解析

for 循环中每次循环都输入一个值,判断这个值是否符合条件,使用 cnt 进行筛选计数,最基础的计数题。

#include<bits/stdc++.h>
using namespace std;
int main() {

    int n, cnt = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int a;
        cin >> a;
        if (a % 9 == 0 && a % 8 != 0)
            cnt++;
    }
    cout << cnt;
  
    return 0;
}

202406-1 休息时间

题目描述

小杨计划在某个时刻开始学习,并决定在学习 ​k 秒后开始休息。

小杨想知道自己开始休息的时刻是多少。

输入格式

前三行每行包含一个整数,分别表示小杨开始学习时刻的时 ​h、分 ​m、秒 ​s​h,m, s 的值符合
​1 < h \le 12,0 \le m\le 59,0 \le s\le59)。

第四行包含一个整数 ​k,表示小杨学习的总秒数(注:​k 的值符合 ​1 \le k \le 3600)。

输出格式

输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。

样例输入 1

12
59
59
10

样例输出 1

13 0 9

提示

小杨在时刻 12:59:59 开始学习,学习 10 秒后开始休息,即在 13:0:9 时刻开始休息。

对于全部数据,保证有 ​1 < h \le 12​0 \le m\le 59​0 \le s\le 59​1 \le k \le 3600

代码解析

简单的数学计算,先将秒数 s 增加 t,然后逐步处理进位

注:也可以使用循环模拟,一秒一秒去加,但是会导致代码更复杂

#include<bits/stdc++.h>
using namespace std;
int main() {

    int h, m, s, t;
    cin >> h >> m >> s >> t;
    s += t;
  
    m += s/60;
    s %= 60;
    h += m/60;
    m %= 60;
    cout << h << ' ' << m << ' ' << s;
  
    return 0;
}

202406-2 立方数

题目描述

小杨有一个正整数 ​n,他想知道 ​n 是否是一个立方数。一个正整数 ​n 是立方数当且仅当存在一个正整数 ​x 满足 ​x\times x\times x=n

输入格式

第一行包含一个正整数 ​n

输出格式

如果正整数 ​n 是一个立方数,输出 Yes,否则输出 No

样例输入 1

8

样例输出 1

Yes

样例输入 2

9

样例输出 2

No

提示

对于样例 1,存在正整数 ​2 使得 ​8=2\times 2\times 2 ,因此 ​8 为立方数。

对于样例 ​2,不存在满足条件的正整数,因此 ​9 不为立方数。

对于全部数据,保证有 ​1 \le n \le 1000

代码解析

枚举法,类似于判断质数的代码,设置一个标记变量 flag,初始化为 false,如果枚举过程中 i*i*i == a 一次都没有成立,flag 依旧为 flase,说明不存在,否则存在

#include<bits/stdc++.h>
using namespace std;
int main() {

    int a;
    cin >> a;
    bool flag = false;
    for (int i = 1; i <= a; i++) {
        if (i*i*i == a)
            flag = true;
    }
    if (flag) cout << "Yes";
    else cout << "No";
  
    return 0;
}

202403-1 小杨买书

题目描述

小杨同学积攒了一部分零用钱想要用来购买书籍,已知一本书的单价是 ​13 元,请根据小杨零用钱的金额,编写程序计算可以购买多少本书,还剩多少零用钱。

输入格式

输入一个正整数 ​m,表示小杨拥有的零用钱数。

输出格式

输出包含两行,第一行,购买图书的本数;第二行,剩余的零用钱数。

样例输入 1

100

样例输出 1

7
9

样例输入 2

199

样例输出 2

15
4

提示

【数据规模与约定】

对全部的测试数据,保证 ​0 < m < 200

代码解析

商是能够买的本数,余数是剩余的零钱

#include<bits/stdc++.h>
using namespace std;
int main() {

    int m;
    cin >> m;
    cout << m / 13 << endl << m % 13;
  
    return 0;
}

202403-2 找因数

题目描述

小 A 最近刚刚学习了因数的概念,具体来说,如果一个正整数 ​a 可以被另一个正整数 ​b 整除,那么我们就说 ​b​a 的因数。

请你帮忙写一个程序,从小到大输出正整数 ​a 的所有因数。

输入格式

输入一行一个正整数 ​a。保证 ​a\leq1000

输出格式

输出若干行,为 ​a 的所有约数,从小到大排序。

样例输入 1

1

样例输出 1

1

样例输入 2

6

样例输出 2

1
2
3
6

样例输入 3

10

样例输出 3

1
2
5
10

代码解析

for 循环筛选,打印 1 ~ a 中能被 a 整除的 i

#include<bits/stdc++.h>
using namespace std;
int main() {

    int a;
    cin >> a;
    for (int i = 1; i <= a; i++)
        if (a % i == 0)
            cout << i << endl;
  
    return 0;
}

202312-1 小杨的考试

题目描述

今天是星期 ​X,小杨还有 ​N 天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用 ​7 表示星期日)

输入格式

输入 ​2 行,第一行一个整数 ​X(1\le X \le 7);第二行一个整数 ​N(1≤N≤364)

输出格式

输出一个整数,表示小杨考试那天是星期几。

样例输入 1

1
6

样例输出 1

7

样例输入 2

5
3

样例输出 2

1

提示

【样例解释 1】

今天是星期 1,那么 6 天后就是星期日,星期日在本题中用 ​7 表示。

【样例解释 2】

今天是星期 5,那么 3 天后就是星期 1。

代码解析

今天是星期 X,明天就是星期 X+1,一天一天的加就好啦,加 N 次,如果加到了星期 8 就让他重新变成 1

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int X, N;
    cin >> X >> N;
  
    for (int i = 0; i < N; i++) {
        X++;
        if (X == 8)
            X = 1;
    }
    cout << X;
    return 0;
}

202312-2 小杨报数

题目描述

小杨需要从 ​1​N 报数。在报数过程中,小杨希望跳过 ​M 的倍数。例如,如果 ​N=5​M=2 ,那么小杨就需要依次报出 ​1​3​5

现在,请你依次输出小杨报的数。

输入格式

输入 ​2 行,第一行一个整数 ​N(1 \le N \le 1,000);第二行一个整数 ​M(2 \le M \le 100)

输出格式

输出若干行,依次表示小杨报的数。

样例输入 1

5
2

样例输出 1

1
3
5

样例输入 2

10
3

样例输出 2

1
2
4
5
7
8
10

代码解析

报数的时候判断 i 不是 m 的倍数则输出

#include<bits/stdc++.h>
using namespace std;
int main() {

    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        if (i % m != 0)
            cout << i << endl;
  
    return 0;
}

202309-1 买文具

题目描述

开学了,小明来到文具店选购文具。签字笔 ​2 元一支,他需要 ​X 支;记事本 ​5 元一本,他需要 ​Y 本;直尺 ​3 元一把,他需要 ​Z 把。小明手里有 ​Q 元钱。请你通过编程帮小明算算,他手里的钱是否够买他需要的文具。

输入格式

第一行包含一个正整数,是小明购买签字笔的数量。约定 ​1 \le X \le 10

第二行包含一个正整数,是小明购买记事本的数量。约定 ​1 \le Y \le 10

第三行包含一个正整数,是小明购买直尺的数量。约定 ​1 \le Z \le 10

第四行包含一个正整数 ​Q,是小明手里的钱数(单位:元)。

输出格式

输出 ​2 行。如果小明手里的钱够买他需要的文具,则第一行输出 Yes,第二行输出小明会剩下的钱数(单位:元);否则,第一行输出 No,第二行输出小明缺少的钱数(单位:元)。

样例输入 1

1
1
1
20

样例输出 1

Yes
10

样例输入 2

1
1
1
5

样例输出 2

No
5

代码解析

每个文具购买的数量乘以对应价钱得到 price ,再比较手里的 p 和需要的钱 price

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int x, y, z, q;
    cin >> x >> y >> z >> q;
    int price = x*2 + y*5 + z*3; 
  
    if (price > q ){
        cout << "No" << endl;
        cout << price - q;
    } else {
        cout << "Yes" << endl;
        cout << q - price;
    }
    return 0;
}

202309-2 小明的幸运数

题目描述

所有个位数为 ​k 的正整数,以及所有 ​k 的倍数,都被小明称为“ ​k 幸运数”。小明想知道正整数 ​L​R 之间(包括 ​L​R)所有 ​k 幸运数的和,你能帮帮他吗?

输入格式

输入 ​3 行。第一行包含一个正整数 ​k,第二行包含一个正整数 ​L,第三行包含一个正整数 ​R。约定 ​2 \le k \le 9​1 \le L \le R \le 1000

输出格式

输出 ​1 行,符合题意的幸运数之和。

样例输入 1

7
1
10

样例输出 1

7

样例输入 2

7
10
20

样例输出 2

31

提示

【样例解释 1】

​1​10 之间共有 ​1​7 幸运数:​7。因为 ​7 既是 ​7 的倍数,个位数又为 ​7。因此,结果为 ​7

【样例解释 2】

​10​20 之间共有 ​2​7 幸运数:​14​17​14​7 的倍数,​17 的个位数为 ​7。因此,结果为 ​31

代码解析

判断个位数为 k :i % 10 == k
判断 k 的倍数:i % k == 0

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int L, R, k, cnt = 0;
    cin >> k >> L >> R;
    for (int i = L; i <= R; i++) {
        if (i % k == 0 || i % 10 == k)
            cnt += i;
    }
    cout << cnt;
    return 0;
}

202306-1 时间规划

题目描述

小明在为自己规划学习时间。现在他想知道两个时刻之间有多少分钟,你能通过编程帮他做到吗?

输入格式

输入 ​4 行,第一行为开始时刻的小时,第二行为开始时刻的分钟,第三行为结束时刻的小时,第四行为结束时刻的分钟。输入保证两个时刻是同一天,开始时刻一定在结束时刻之前。时刻使用 ​24 小时制,即小时在 ​0​23 之间,分钟在 ​0​59 之间。

输出格式

输出一行,包含一个整数,从开始时刻到结束时刻之间有多少分钟。

样例输入 1

9
5
9
6

样例输出 1

1

样例输入 2

9
5
10
0

样例输出 2

55

代码解析

看下面两个例子理解分钟的计算方法:

2:30 ~ 4:40 相差 (4-2)*60+(40-30) = 130 分钟
2:40 ~ 4:30 相差 (4-2)*60+(30-40) = 110 分钟

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int a1,b1,a2,b2;
    cin >> a1 >> b1 >> a2 >> b2;
  
    cout << (a2-a1)*60+(b2-b1);
  
    return 0;
}

202306-2 累计相加

题目描述

输入一个正整数 ​n,求形如:

​1+(1+2)+(1+2+3)+(1+2+3+4)+ \cdots +(1+2+3+4+5+ \cdots +n) 的累计相加。

输入格式

输入一个正整数 ​n。约定 ​1<n \le 100

输出格式

输出累计相加的结果。

样例输入 1

3

样例输出 1

10

样例输入 2

4

样例输出 2

20

样例输入 3

10

样例输出 3

220

代码解析

这里的内层循环变量 j 每次都会从 1 开始重新进行一整轮,只需要用 i 控制内层循环次数即可。

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int n, s = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            s += j;
        }
    }
    cout << s;
    return 0;
}

202303-1 每月天数

题目描述

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

输入格式

输入一行,包含两个整数 ​A, B,分别表示一个日期的年、月。约定 ​2000 \leq A \leq 3000​1 \leq B \leq 12

输出格式

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

样例输入 1

2022 1

样例输出 1

31

样例输入 2

2020 2

样例输出 2

29

代码解析

使用数组 a[] 表示每月的天数,如 a[1] 代表 1 月的天数

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int a[] = {0, 31,28,31,30,31,30,31,31,30,31,30,31};
    int y, m;
    cin >> y >> m;
    if (y%4==0 && y%100!=0 || y%400==0)
        a[2] = 29;
    cout << a[m];
  
    return 0;
}

202303-2 长方形面积

题目描述

小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。

输入格式

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

输出格式

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

样例输入 1

4

样例输出 1

2

样例输入 2

6

样例输出 2

2

提示

【样例 1 解释】

​2 种长方形面积为 ​4,它们的长宽分别为 ​2 \times 2​4 \times 1

【样例 2 解释】

​2 种长方形面积为 ​6,它们的长宽分别为 ​3 \times 2​6 \times 1

代码解析

这道题实际上就是求一个数的因数有多少 “对”(如 6 的因数有 1,6 和 2,3,一共两对)
1 ~ sqrt(s) 中 s 的因数个数就是所求的值(如 16 的算数平方根为 4,1~4 中 16 的因数有 1、2、4,那 16 的因数也就是有 3 对:(1, 16)、(2, 8)、(4, 4)。)

#include<bits/stdc++.h>
using namespace std;
int main() {
  
    int s, cnt = 0;
    cin >> s;
  
    for (int i = 1; i <= sqrt(s); i++) {
        if (s % i == 0)
            cnt++;
    }
  
    cout << cnt;
  
    return 0;
}

Copyright © 2021-2024 可见