设int a,*p=&a;以下哪项表达式不成立?
A、*p==&a
B、*p==*&a
C、(*p)++==a++
D、*(p++)==a++
为什么选A?
A不成立,因为a是int,&a是int ,而p是int,两者不匹配
不知道你这个问题是否已经解决, 如果还没有解决的话:char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };
mine棋盘用来布雷存储在内部
show棋盘用来显示周围累的个数,展示给玩家
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
到这里有些人应该会有些疑惑为什么9*9的棋盘数组要
创建11*11的因为当我们扫雷的时候,当排查边界的坐
标时计算周围雷的个数会越界造成无法计算出周围雷的
个数,当数组是11*11的时候则完美解决问题。
对于优化后的问题——了解为什么应该选择选项A,我们需要先了解选项A和其他选项的区别:
选项A是对两个已排好序的数组进行合并,将合并后的元素从后往前依次插入到第一个数组中,保持第一个数组有序。选项B是利用插入排序对单个已排序的数组进行插入操作,插入新元素后再进行插入排序,保持数组有序。选项C是重新开辟一个数组,利用归并排序的思想将两个已排好序的数组合并。选项D与选项B类似,也是对单个已排序的数组进行插入操作,但是每个元素都需要移动,效率较低。
根据题目中的要求,选项A是合并两个已排序的数组并保持有序,完全符合题目需求,相较其他选择更为优秀。同时,由于选项A在合并过程中,只需要一个额外的数组用来暂存合并后的数组,不需要额外的空间,因此对空间的要求较低。对于实际应用场景,如果需要对两个已排序的数组进行合并,保持有序,选项A是一个比较好的选择。
最后给出选项A的完整代码:
void merge(int A[],int &An,int B[],int Bn) { for(int i=Bn-1; i>=0; i--) { for(int j=An-1; j>=0; j--) { if(B[i]>A[j]) { int q; for(q=An; q>j; q--) { A[q]=A[q-1]; } A[q+1]=B[i]; An++; break; } } } }