C++蓝桥杯真题(题目+解析+流程图)(特殊运算符+四叶玫瑰数+质因数的个数+最大的矩形纸片+数字游戏+活动人数)

发布于:2025-05-13 ⋅ 阅读:(16) ⋅ 点赞:(0)

蓝桥杯省赛C++题目分析

1. 特殊运算符

题目描述

假定有一个运算符“>>>”,它的功能是取一个三位数的前两位。给定一个正整数N(100<N<1000),请计算N-(>>>N)的结果。

输入描述

输入一个正整数N(100<N<1000)。

输出描述

输出一个整数,表示N-(>>>N)的结果。

输入输出样例
  • 输入:257
  • 输出:232
正确代码
#include <iostream>
using namespace std;

int main() {
   
    int n;
    cin >> n;
    int k = n / 10; // “>>>”的意义指取一个三位数的前两位
    cout << n - k;
    return 0;
}
错误代码
#include <iostream>
using namespace std;

int main() {
   
    int n;
    cin >> n;
    int k = n / 100; // 错误地取了百位数
    cout << n - k;
    return 0;
}
分析

本题的关键在于理解“>>>”运算符的含义,即取三位数的前两位。通过整数除法n/10可以实现这一功能,而不是错误地使用n/100

流程图
开始
输入正整数N
计算k = n / 10
计算结果n - k
输出结果
结束

2. 四叶玫瑰数

题目描述

四叶玫瑰数是指一个四位数,其各位上的数字的四次方之和等于本身。给定两个正整数N和M,请将N~M(1≤N≤M≤1000000)之间(含N和M)的四叶玫瑰数按从小到大的顺序输出。

输入描述

第一行输入两个正整数N、M(1≤N≤M≤1000000)。

输出描述

输出一行,包含若干个用一个空格隔开的正整数,表示N~M之间的四叶玫瑰数。

输入输出样例
  • 输入:1234 2345
  • 输出:1634
正确代码
#include <iostream>
#include <cmath>
using namespace std;

bool isFourLeafRose(int num) {
   
    int a = num / 1000;
    int b = num / 100 % 10;
    int c = num / 10 % 10;
    int d = num % 10;
    return pow(a, 4) + pow(b, 4) + pow(c, 4) + pow(d, 4) == num;
}

int main() {
   
    int n, m;
    cin >> n >> m;
    for (int i = max(n, 1000); i <= min(m, 9999); i++) {
   
        if (isFourLeafRose(i)) {
   
            cout << i << " ";
        }
    }
    return 0;
}
错误代码
#include <iostream>
#include <cmath>
using namespace std;

bool isFourLeafRose(int num) {
   
    int a = num / 1000;
    int b = num / 100 % 10;
    int c = num / 10 % 10;
    int d = num % 10;
    return pow(a, 3) + pow(b, 3) + pow(c, 3) + pow(d, 3) == num; // 错误地使用了三次方
}

int main() {
   
    int n, m;
    cin >> n >> m;
    for (int i = n; i <= m; i++) {
   
        if (isFourLeafRose(i)) {
   
            cout << i << " ";
        }
    }
    return 0;
}
分析

本题需要判断一个四位数是否为四叶玫瑰数,即其各位数字的四次方之和是否等于该数本身。正确代码中使用了pow函数计算四次方,并通过循环遍历指定范围内的所有四位数来寻找符合条件的数。错误代码中错误地使用了三次方,导致无法正确判断四叶玫瑰数。

流程图

网站公告

今日签到

点亮在社区的每一天
去签到