个人主页:Lei宝啊
愿所有美好如期而遇
选择题
请找出下面程序中有哪些错误()
int main()
{
int i = 10;
int j = 1;
const int *p1;//(1)
int const *p2 = &i; //(2)
p2 = &j;//(3)
int *const p3 = &i;//(4)
*p3 = 20;//(5)
*p2 = 30;//(6)
p3 = &j;//(7)
return 0;
}
A. 1,2,3,4,5,6,7
B. 1,3,5,6
C. 6,7
D. 3,5
解析:(1)限制*p1,并不限制p,也就是说,可以修改指针。(2)const同样不限制p,初始化地址是正确的。(3)也是同(2)的道理,所以是对的。(4)中的const限制指针,但是初始化不受影响,所以是对的。(5)中p3不能修改,但是*p3可以修改。(6)中p2可以修改,但是*p2不可修改,所以是错的。(7)中p3不可修改,所以错误。
因此正确答案选C。
编程题
排序子序列https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471?orderByHotValue=0&commentTags=Java
思路:
判断v[i]和v[i+1]的大小,如果结果是小于,则进入小于的while循环,在结束该循环时算一个子序列;如果是大于,则进入大于的while循环,在结束循环时算一个子序列;如果是等于,则走完等于序列即可。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n = 0;
cin >> n;
vector<int> v(n+1);
v[n] = 0;
for(auto &e : v) cin >> e;
int i = 0;
int count = 0;
while(i < n)
{
if(v[i] < v[i+1])
{
while(v[i] < v[i+1])
{
i++;
}
count++;
i++;
}
else if(v[i] == v[i+1])
{
while(v[i] == v[i+1])
{
i++;
}
}
else
{
while(v[i] > v[i+1])
{
i++;
}
count++;
i++;
}
}
cout << count;
return 0;
}