答案:A
解析:函数在main()前声明了就可以定义在main()后。
答案:B
解析:先执行func(),输出局部变量x=20,然后输出全局变量x=10
答案:B
解析:p为指向a的指针,*p可直接访问a,所以*p=20相当于a=20。
答案:D
解析:引用传递和指针传递都是传递地址,不会拷贝参数对象。
答案:D
解析:swap中传入了y的引用,所以y的值被改为了x的值,x并未被修改。
答案:C
解析:A,结构体里没有定义构造函数,所以不能这么写。B,name后面写了逗号,应该是分号。C,对的。D,和A差不多,且不能用new,new返回指针,这里的p不是指针。
答案:D
解析:嵌套层次应当合理,不宜超过3层。否则会影响代码的可读性、可维护性,以及编译效率。
答案:D
解析:第2行第3列。
答案:B
解析:一眼分辨
答案:B
解析:结果就是前两层的方法数量的合计,所以要么B要么D;D:执行完后f1=f2=res,所以B是对的。
答案:B
解析:第一个循环:2n次,第二个循环n次。
答案:B
解析:只有B
答案:A
解析:升序排序,将最大的冒到最后,或最小的冒到最前面,所以第一轮要么1在最前面,要么8在最后面,现在只有A和B,说明是移动最大的到后面,所以第一轮就是5和3比,交换,5和8比,不变,8和1比,交换,得3,5,1,8。
答案:A
解析:a=10,b=-10,所以执行第3行,被15行捕获并输出。
答案:C
解析:ofstream不能用cout。除非做了条件编译,比如:#define outFile cout。
答案:T
解析:如题所述
答案:F
解析:不可以,没有默认类型。
答案:T
解析:如题所述
答案:F
解析:p的值是0x7ffee4065824,p指向1
答案:F
解析:二维数组作为函数参数时,第一维可以省略,第二维(及更高维)必须显式指定。
答案:T
解析:如题所述
答案:T
解析:这题是语文题,T(n)指的是复杂度,所以n个数字的这轮排序复杂度是n,不是n-1。
答案:F
解析:最好情况为O(n),插入排序在 已有序数组 上只需遍历一次,每次仅需 1 次比较 确认位置,无需额外操作。
答案:F
解析:选择最小的,然后交换当前位置,所以是1,3,4,5,2。
答案:T
解析:如题所述
代码示例:
//选择清扫杂物后可以释放最多荒地的点
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
char mat[N][N]; //地图
int a[N][N]; //a[i][j]:点(i,j)可以释放荒地的数量
const int d[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int main() {
int n, m, ans = 0;
scanf("%d%d", &n, &m);
assert(1 <= n && n <= 1000);
assert(1 <= m && m <= 1000);
for (int i = 1; i <= n; i ++)
scanf("%s", mat[i] + 1); //输入地图,从第二行第二列开始输入,空出第一行第一列,就免去判断上边界和左边界
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++) {
int num = 0, p = -1; //p:当前点周围有'#'的点的方向,num:当前点周围有'#'的点的数量
for (int k = 0; k < 4; k ++) //遍历四个方向
if (mat[i + d[k][0]][j + d[k][1]] == '#') //当前点周围有'#'
num ++, p = k; //如果只有一个'#',正好记录这个方向
if (mat[i][j] == '.' && num == 1) //当前点周围有杂物且周围只有一个杂物
a[i + d[p][0]][j + d[p][1]] ++; //表示如果清扫这个杂物,可以释放当前这个荒地,因为如果有1个以上的杂物,即使清扫了其中一个,也不能释放这个荒地
else if (mat[i][j] == '.' && num == 0)
ans ++; //当前点周围没有'#',可开垦的数量加一
else if (mat[i][j] == '#' && num == 0)
a[i][j] ++; //当前这个'#'的点如果被清扫,也可以释放一个荒地
}
int mx = 0;
for (int i = 1; i <= n; i ++)
for (int j = 0; j <= m; j ++)
mx = max(mx, a[i][j]); //mx:可以释放的荒地的最大值
cout << ans + mx << endl;
return 0;
}
代码示例:
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, m;
int a[N][N];
int ans;
int main() {
scanf("%d%d", &n, &m);
assert(1 <= n && n <= 500 && 1 <= m && m <= 500);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
scanf("%d", &a[i][j]);
assert(-100 <= a[i][j] && a[i][j] <= 100);
}
//遍历每个二阶矩阵,看是否满足条件
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++)
if (a[i][j] * a[i + 1][j + 1] == a[i + 1][j] * a[i][j + 1])
ans++;
printf("%d\n", ans);
return 0;
}
学编程、玩信奥,微信搜“信奥莫老师”,或关注微信公众号“AI之上-信奥驿站”