考察计算机科学基础知识。16位的位图表示一个像素单元占用16位表示每一个像素单元占用16位的存储空间,因此800600的图片占用空间为600800*16/8=937.5KB. A
本题考察数据结构基础知识。栈顶为hs,此时s要进栈,由于是链式栈,所以首先将s的下一个节点位置指向hs,然后吧hs指向s所指向的地址 。B
题目只问子串的数量,他包括一个空子串的和非空子串的数量:9+8+7+6+5+4+3+2+1,最后答案是46
考察算法基础知识。归并排序当有一方为空的时候,就可以不用再进行比较,直接将另一方剩余元素接在数组后面即可。否则每进行一次比较,均有一个元素可以接到数组后面,故总比较次数为:总元素个数减去一方为空时另一方的剩余元素个数。所以最少的剩余元素个数是1,最多比较次数为2n-1次。
可以通过枚举答案来思考。显然只操作一次是不可能实现的,再通过枚举也可以发现操作两次也无法实现。当考虑操作三次时,对第一行第一个位置、第三行第三个位置和第三行第四个位置进行操作,便可以将所有格子的数字都变为0.
23题:
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int x = 1;
int y = 1;
int dx = 1;
int dy = 1;
int cnt = 0;
while(cnt != 2) {
cnt = 0;
x = x + dx;
y = y + dy;
if(x == 1 || x == n) {
++cnt;
dx = -dx;
}
if(y == 1 || y == m) {
++cnt;
dy = -dy;
}
}
cout << x << " " << y << endl;
return 0 ;
}
输入:
4 3
2017 1014
此程序有两个关键变量x和y。x的值从1到n再到1循环;y的值从1再到m再到1循环。程序球队是x和y同时为边界值时,边界值为多少。观察发现x周期为2n-2,y周期为2m-2.因此,对n-1与m-1求最小公倍数D,用D分别除以n-1和m-1,观察结果。如果结果为偶数,那么对应的值为1,否则为n或m。分析功能可知,该程序是模拟一个初始位于一个长为n宽为m的盒子内的左下角有一个小球初始向正右上方向移动,碰到盒子边界之后就会完全反弹,求第二次碰到盒子时小球的坐标,通过画图模拟也可以得出结果。
答案:1 3
2017 1
#include <iostream>
using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; //绳子长度
int main()
{
cin >> n;
count = 0;
for (i = 0; i < n; i++) {
cin >> len[i];
①;
}
cin >> m;
if (②) {
cout << "Failed" << endl;
return 0;
}
lbound = 1 ;
ubound = 1000000 ;
while (③) {
mid = ④;
count =0 ;
for (i = 0; i < n; i++ )
⑤;
if (count < m)
ubound = mid - 1 ;
else
lbound = mid ;
}
cout << lbound << endl;
return 0;
}
题目答案:
1:count=count+len[i]
2:count[HTML_REMOVED]count。第3 4 5空均在二分里,第3空是二分结束的条件,故应该lbound[HTML_REMOVED]lbound,即当前二分的区间长度还大于1的时候,说明没有确定最终值是多少。第4空需要特别注意,由于底下ubound是通过mid-1,lbound是通过mid来更新的,所以这空需要填(lbound+ubound+1)/2。第5空是用来求当确定绳子的切割长度为mid后,最多能切多少段,故应该填count=count+len[i]/mid。