当前位置:首页>java>【第35期】21天养成编程习惯:C++刷题第14天

【第35期】21天养成编程习惯:C++刷题第14天

  • 2026-10-21 13:29:40
【第35期】21天养成编程习惯:C++刷题第14天

跟老马一起“升级打怪”学编程!

  • 涉及考试:计算机学会编程能力等级认证(GESP)
  • 活动内容:提供不同等级的真题供小朋友们选择练习
  • 备考建议:根据自己备考的等级选择相应题目
  • 附加价值:可作为白名单比赛的备考训练
  • 本月打卡:本月打卡题目

Day14:GESP一级2024.12_奇数和偶数

【提交】

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;}

Day14:Openjudge1.5.04_求整数的和与均值

【提交】

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;}

Day14:Openjudge1.6.07_有趣的跳跃

【提交】

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;}

Day14:Openjudge1.10.06_整数奇偶排序

【提交】

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;}

Day14:Openjudge1.11.01_查找最接近的元素

【提交】

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;}

Day14:GESP六级2024.09_小杨和整数拆分

【提交】

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天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章