单项选择题
解析:单行注释://
多行注释:/* 注释内容 */
解析:main函数有且只有一个,是 C++ 程序的入口。
解析:int 是关键字。
解析:二进制加法,0 + 0 = 0,1 + 0 = 1,0 + 1 = 1,1 + 1 = 10
解析:int* 是指向int类型的指针,pa[5] 是数组,数组中每一个元素都是一个int型指针。
编程题
解析:循环嵌套判断进行枚举,符合要求的数字直接输出。
- #include
- using namespace std;
- int main(){
- int n;
- cin >> n;
- for(int i = 1; i <= n; i++)
- if(i % 7 == 0)
- cout << i << ' ';
- return 0;
- }
解析:变量 x 存储 1、3、6、10……,差值为等差数列,再将变量 x 累加到 s 变量中。
- #include
- using namespace std;
- int main(){
- int n;
- cin >> n;
- int x = 0, s = 0;
- for(int i = 1; i <= n; i++){
- x += i;
- s += x;
- }
- cout << s;
- return 0;
- }
解析:本质上是冒泡排序,统计相邻元素交换次数。
- #include
- using namespace std;
- int n;
- int a[1010];
- int main() {
- cin >> n;
- for(int i = 1; i <= n; i++) cin >> a[i];
- int res = 0;
- for(int i = 1; i < n; i++){
- for(int j = 1; j < n; j++)
- if(a[j] > a[j + 1]){
- swap(a[j], a[j + 1]);
- res++;
- }
- }
- cout << res;
- return 0;
- }
解析:日期问题虽然不属于某一种算法,然而,各种算法竞赛中经常考到,模拟起来略有复杂,一般都要设置一个判断闰年的函数,以及一个存储每月最大天数的数组,可以使得编程时更加容易。
因此,平时练习可以将日期问题进行分类。
- #include
- using namespace std;
- bool is_leap(int n){
- return (n % 4 == 0 && n % 100) || n % 400 == 0;
- }
- int n;
- int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- int y = 1999, m = 4, d = 30;
- int main() {
- cin >> n;
- for(int i = 2; i <= n; i++){
- d++;
- if(m == 2) months[2] = 28 + is_leap(y);
- if(d > months[m]){
- d = 1;
- if(m == 12){
- m = 1;
- y++;
- }
- else m++;
- }
- }
- printf("%d-%02d-%02d", y, m, d);
- return 0;
- }
解析:试除法判断质数,然后判断一个数字和其逆序数是否均为质数。
求数字逆序可以利用stirng字符串反转快速实现。
- #include
- using namespace std;
- bool is_prime(int n){
- for(int i = 2; i <= n / i; i++)
- if(n % i == 0)
- return false;
- return true;
- }
- int main() {
- int n;
- cin >> n;
- int res = 0;
- for(int i = 2; i <= n; i++){
- string s = to_string(i);
- reverse(s.begin(), s.end());
- int j = stoi(s);
- if(is_prime(i) && is_prime(j))
- res++;
- }
- cout << res;
- return 0;
- }
解析:题干较长,是一道完全二叉树问题,但是求解思路很简单,只需将结点权值按照层序遍历分组求和,第一层1个结点,第二层2个结点,第三层四个结点,以此类推。
不需要考虑最后一层结点没有铺满情况,因为是全局数组,默认值为0,没有结点和累加0的作用是一样的。
- #include
- using namespace std;
- int n;
- int a[210];
- int main() {
- cin >> n;
- for(int i = 1; i <= n; i++) cin >> a[i];
- int maxv = -1, idx = 0, level = 0;
- for(int i = 1; ; i++){
- int sum = 0;
- for(int j = 1; j <= (1 << (i - 1)); j++)
- sum += a[++idx];
- if(sum > maxv){
- maxv = sum;
- level = i;
- }
- if(idx > n) {
- cout << level;
- return 0;
- }
- }
- return 0;
- }