涉及考试:计算机学会编程能力等级认证(GESP) 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月打卡题目
【提交】
https://www.luogu.com.cn/problem/B4063
【问题描述】
小杨有 个正整数,他想知道其中的奇数有多少个,偶数有多少个。
【输入描述】
第一行包含一个正整数 ,代表正整数个数。
之后 行,每行包含一个正整数。
【输出描述】
输出两个正整数,代表奇数的个数和偶数的个数。
【样例输入1】
512345【样例输出1】
3 2【数据范围】
对于全部数据,保证有 且正整数大小不超过 。
参考答案:
/** [GESP202412 一级] 奇数和偶数* https://www.luogu.com.cn/problem/B4063*/#include<iostream>using namespace std;intmain(){int n, js = 0, os = 0;//正整数个数cin >> n;for (int i = 0; i < n; i++) {int x;cin >> x;if (x % 2 == 0) { os++; }else { js++; } }cout << js << " " << os;return 0;}【提交】
http://noi.openjudge.cn/ch0105/04/
【描述】
读入个整数,求它们的和与均值。
【输入】
输入第一行是一个整数,表示有个整数。
第 ~ 行每行包含1个整数。每个整数的绝对值均不超过10000。
【输出】
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。
【样例输入】
4344222343222【样例输出】
1131 282.75000【参考程序】
C语言版本
/** 04:求整数的和与均值* http://noi.openjudge.cn/ch0105/04/*/#include<cstdio>intmain(){int n, x, sum = 0;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &x); sum += x; }printf("%d %.5f", sum, (1.0 * sum) / n);return 0;}C++版本
/** 04:求整数的和与均值* http://noi.openjudge.cn/ch0105/04/*/# include<iostream># include<iomanip>using namespace std;intmain(){int n, x, sum = 0;cin >> n;for (int i = 0; i < n; i++) {cin >> x; sum += x; }cout << sum << " " << fixed << setprecision(5) << (1.0 * sum) / n;return 0;}【提交】
http://noi.openjudge.cn/ch0106/07/
【描述】
一个长度为的序列中存在“有趣的跳跃”当且仅当相邻元素的差的绝对值经过排序后正好是从到。例如,存在“有趣的跳跃”,因为差的绝对值分别为。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。
你需要写一个程序判定给定序列是否存在“有趣的跳跃”。
【输入】
一行,第一个数是,为序列长度,接下来有个整数,依次为序列中各元素,各元素的绝对值均不超过。
【输出】
一行,若该序列存在“有趣的跳跃”,输出"Jolly",否则输出"Not jolly"。
【样例输入】
4 1 4 2 3【样例输出】
Jolly【参考程序】
C语言版本
方法一:
/** 07:有趣的跳跃* http://noi.openjudge.cn/ch0106/07/*/# include<cstdio># include<cmath>intmain(){int a[3000] = { 0 }, b[3000] = { 0 };int n, temp;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);if (i != 0) { temp = abs(a[i] - a[i - 1]);if (temp<1 || temp>n - 1) {printf("Not jolly");return 0; }if (b[temp] != 0) {printf("Not jolly");return 0; } b[temp] += 1; } }printf("Jolly");return 0;}方法二:
/** 07:有趣的跳跃* http://noi.openjudge.cn/ch0106/07/*/# include<cstdio># include<cmath>intmain(){int a[3000] = { 0 }, b[3000] = { 0 };int n, temp;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);if (i != 0) { b[i] = abs(a[i] - a[i - 1]); } }for (int i = 1; i < n - 1; i++) {for (int j = 1; j < n - i; j++) {if (b[j] > b[j + 1]) { temp = b[j]; b[j] = b[j + 1]; b[j + 1] = temp; } } }for (int i = 1; i < n; i++) {if (b[i] != i) {printf("Not jolly");return 0; } }printf("Jolly");return 0;}C++版本
方法一:
/** 07:有趣的跳跃* http://noi.openjudge.cn/ch0106/07/*/# include<iostream># include<cmath>using namespace std;intmain(){int a[3000] = { 0 }, b[3000] = { 0 };int n,temp;cin >> n;for (int i = 0; i < n; i++) {cin >> a[i];if (i != 0) { temp = abs(a[i] - a[i - 1]);if (temp<1 || temp>n - 1) {cout << "Not jolly";return 0; }if (b[temp] != 0) {cout << "Not jolly";return 0; } b[temp] += 1; } }cout << "Jolly";return 0;}方法二:
/** 07:有趣的跳跃* http://noi.openjudge.cn/ch0106/07/*/# include<iostream># include<cmath>using namespace std;intmain(){int a[3000] = { 0 }, b[3000] = { 0 };int n,temp;cin >> n;for (int i = 0; i < n; i++) {cin >> a[i];if (i != 0) { b[i] = abs(a[i] - a[i - 1]); } }for (int i = 1; i < n - 1; i++) {for (int j = 1; j < n - i; j++) {if (b[j] > b[j + 1]) { temp = b[j]; b[j] = b[j + 1]; b[j + 1] = temp; } } }for (int i = 1; i < n; i++) {if (b[i] != i) {cout << "Not jolly";return 0; } }cout << "Jolly";return 0;}【提交】
http://noi.openjudge.cn/ch0110/06/
【描述】
给定10个整数的序列,要求对其重新排序。排序要求:
1. 奇数在前,偶数在后;
2. 奇数按从大到小排序;
3. 偶数按从小到大排序。
【输入】
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100。
【输出】
按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。
【样例输入】
4 7 3 13 11 12 0 47 34 98【样例输出】
47 13 11 7 3 0 4 12 34 98【参考程序】
C++版本
/** 06:整数奇偶排序* http://noi.openjudge.cn/ch0110/06/*/#include<iostream> #include<algorithm>using namespace std;intmain(){int arr[10];for (int i = 0;i < 10;i++) {cin >> arr[i]; } sort(arr, arr + 10);for (int i = 9;i >= 0;i--) {if (arr[i] % 2 == 1) {cout << arr[i] << " "; } }for (int i = 0;i < 10;i++) {if (arr[i] % 2 == 0) {cout << arr[i] << " "; } }return 0;}【提交】
http://noi.openjudge.cn/ch0111/01/
【描述】
在一个非降序列中,查找与给定值最接近的元素。
【输入】
第一行包含一个整数 ,为非降序列长度。。
第二行包含 个整数,为非降序列各元素。所有元素的大小均在 之间。
第三行包含一个整数 ,为要询问的给定值个数。。
接下来行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在之间。
【输出】
行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。
【样例输入】
32 5 82105【样例输出】
85【参考程序】
/** 01:查找最接近的元素* http://noi.openjudge.cn/ch0111/01/*/#include<iostream>using namespace std;long long arr[100005] = { 0 };//返回大于等于x的最小元素的坐标intcheck(int x, int start,int end){int left = start, right = end;while (left < right) {int mid = (left + right) / 2;if (arr[mid] >= x) { right = mid; }else { left = mid + 1; } }return left;}intmain(){int n, m, x;cin >> n;for (int i = 1;i <= n;i++) {cin >> arr[i]; } arr[0] = -1e12; arr[n + 1] = 1e12;cin >> m;for (int i = 0;i < m;i++) {cin >> x;int index = check(x, 1, n + 1);int v = x - arr[index - 1] <= arr[index] - x ? index - 1 : index;cout << arr[v] << endl; }return 0;}【提交】
https://www.luogu.com.cn/problem/P11246
【问题描述】
小杨有一个正整数 ,小杨想将它拆分成若干完全平方数的和,同时小杨希望拆分的数量越少越好。
编程计算总和为 的完全平方数的最小数量。
【输入描述】
输入只有一行一个正整数 。
【输出描述】
输出一行一个整数表示答案。
【样例输入1】
18【样例输出1】
2【说明/提示】
对全部的测试数据,保证 。
【样例输出2】
参考答案:
/** [GESP202409 六级] 小杨和整数拆分* https://www.luogu.com.cn/problem/P11246*/#include<iostream># include<climits>using namespace std;int n,len,dp[100005];int a[400];//记录完全平方数intdfs(int x, int pos){if (x == 0) {return 0; }if (dp[x]) {return dp[x]; } dp[x] = INT_MAX;for (int i = pos;i <= len && a[i] <= x;i++) { dp[x] = min(dp[x], dfs(x - a[i], pos) + 1); }return dp[x];}intmain(){cin >> n;for (int i = 1;i * i <= n;i++) { a[++len] = i * i; }cout << dfs(n, 1);return 0;}青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
