当前位置 : 主页 > 网络编程 > 其它编程 >

蓝桥杯第五天刷题

来源:互联网 收集:自由互联 发布时间:2023-07-02
第一题数的分解 第一题数的分解 题目描述本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可。把 2019 分解成 3 个各不相同的正整数之和并且要求每个正整数都不
第一题数的分解

第一题数的分解

题目描述本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可。把 2019 分解成 3 个各不相同的正整数之和并且要求每个正整数都不包含数字 2和 4一共有多少种不同的分解方法注意交换 3 个整数的顺序被视为同一种方法例如 10001001181000100118 和 10011000181001100018 被视为同一种。运行限制最大运行时间1s最大运行内存: 128M

枚举第一个数和第二个数第三个数就等于总数减去前两个数之和

然后要确保方法相同即i

#includeusing namespace std;bool check(int x){while(x){int t x % 10;if(t 2 || t 4) return false;x / 10;}return true;}int main(){int ans 0;for(int i 1; i < 2019; i)for(int j i 1; j j ;}}cout<}

第二题猜生日

题目描述本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可。今年的植树节2012 年 3 月 12 日小明和他的叔叔还有小伙伴们一起去植树。休息的时候小明的同学问他叔叔多大年纪他叔叔说“我说个题目看你们谁先猜出来”“把我出生的年月日连起来拼成一个 8 位数月、日不足两位前补 0正好可以被今天的年、月、日整除”他想了想又补充到“再给个提示我是 6 月出生的。”根据这些信息请你帮小明算一下他叔叔的出生年月日。格式是年月日连成的 8 位数。例如如果是 1948 年 6 月 12 日就写19480612。运行限制最大运行时间1s最大运行内存: 128M

想到回文日期那道题就顺便把检查日期是否合法给打了一遍

这道题就是枚举加判断

#includeusing namespace std;bool isleap(int year){return year % 400 0 || (year % 4 0 0);}bool isright(int n){int year n / 10000;int month n / 100 % 100;int day n % 100;if(day > 31) return false;if(month > 12 || month 29) return false;else if (!isleap(year) if(month 4 || month 6 || month 9 || month 11)if(day > 30) return false;return true;}bool isright2(int n){int year n / 10000;int month n / 100 % 100;int day n % 100;if(day > 30) return false;if(month ! 6) return false;return true;}int main(){int a 2012, b 3, c 12;for(int i 19480612; i < 20120312; i){if(isright2(i) 0 0 0){cout<第三题成绩统计题目描述小蓝给学生们组织了一场考试卷面总分为 100 分每个学生的得分都是一个 0 到 100 的整数。如果得分至少是 60 分则称为及格。如果得分至少为 85 分则称为优秀。请计算及格率和优秀率用百分数表示百分号前的部分四舍五入保留整 数。输入描述输入的第一行包含一个整数 n (1≤n≤104)表示考试人数。接下来 n 行每行包含一个 0 至 100 的整数表示一个学生的得分。输出描述输出两行每行一个百分数分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。输入输出样例输入

780925674881000输出

71%43%

至少可以等于然后要除先乘100四舍五入round函数

#include#include#includeusing namespace std;int n;int main(){scanf("%d", int x 0 , y 0, t n;while(t --){int a;scanf("%d", if(a > 85)x;else if( a > 60)y;}float i (x y) * 100.0 / n;float j x * 100.0 / n;cout<第四题最大和问题描述小蓝在玩一个寻宝游戏, 游戏在一条笔直的道路上进行, 道路被分成了 n 个方格, 依次编号 1 至 n, 每个方格上都有一个宝物, 宝物的分值是一个整数 (包括正数、负数和零), 当进入一个方格时即获得方格中宝物的分值。小蓝可 以获得的总分值是他从方格中获得的分值之和。小蓝开始时站在方格 1 上并获得了方格 1 上宝物的分值, 他要经过若干步 到达方格 n。当小蓝站在方格 p 上时, 他可以选择跳到 p1 到 pD(n−p) 这些方格 中的一个, 其中 D(1)1,D(x)(x>1) 定义为 x 的最小质因数。给定每个方格中宝物的分值, 请问小蓝能获得的最大总分值是多少。输入格式输入的第一行包含一个正整数 n 。第二行包含 n 个整数, 依次表示每个方格中宝物的分值。输出格式输出一行包含一个整数, 表示答案。

样例输入

51 -2 -1 3 5

样例输出

8

最长上升子序列问题

状态是从 1到 n-p的最小质数套模板

为负初始化为无穷小

n * 1e5 > int用long long,虽然题目测试数据没有但是分析可能会

#include#includeusing namespace std;const int N 10010;typedef long long LL;int n;LL a[N], f[N];bool check(int x){for(int i 2; i < x / i; i)if(x % i 0)return false;return true;}int D(int x){if(x 1) return 1;int i;for(i 2; i < x; i)if(check(i) 0)break;return i;}int main(){scanf("%d", for(int i 1; i < n; i) scanf("%lld", memset(f, -0x3f, sizeof f);f[1] a[1];for(int i 1; i < n; i){int d D(n - i);for(int j 1; j n) break;f[i j] max(f[i j], f[i] a[j i]);}}cout<

网友评论