排序子序列,倒置字符串

问答题

问答题1:下面叙述错误的是
char acX[]=“abc”;
char acY[]={‘a’,‘b’,‘c’};
char *szX=“abc”;
char *szY=“abc”;

(A) acX与acY的内容可以修改
(B) szX与szY指向同一个地址
(C) acX占用的内存空间比acY占用的大
(D) szX的内容修改后,szY的内容也会被更改

提示:对于acX 和 acY 的字符串是保存在栈空间数组里,所以可以修改,szX 和 szY 指向了同一个字符串abc,所以他们指向的是一个地址,但是指针地址并不相同;acX 比 acY多一个\0 ;szX中的内容是无法修改的.

问答题2:下列代码运行结果是?

int a[]={1,2,3,4};
int *b=a;
*b+=2;
*(b+2)=2;
b++;
printf("%d,%d\n",*b,*(b+2));

提示:第三行和第四行是赋值,指针并没有往前走,第五行指针才走了一步.

问答题3:在32位 cpu 上选择缺省对齐的情况下,下列程序输出什么?

struct A {
		unsigned a:19;
		unsigned b:11;
		unsigned c:4;
		unsigned d:29;
		char index;
	};
cout << sizeof(struct A) << endl;

这是一个位段的问题,可以节省空间,因为其内存分配和结构体对齐是不一样的,有个缺陷就是,不可移植无法跨平台.

在这里插入图片描述
一共占据 4 个 32位,一个32位是4个字节,所以sizeof(A)为16字节.

问答题4:关于c++的inline关键字,哪个说法正确?

A 使用inline关键字的函数会被编译器在调用处展开

错误,inline 只是用户对编译器的建议,但是编译器有权利忽略,特别是对于一些复杂函数,如果被展开,会很复杂.

B 头文件中可以包含inline函数的声明

在函数的定义面前加 inline 才有作用,在声明前是无效果的.所以当函数被展开前,会在文件中寻找内联函数的定义,如果没有定义则不会展开.

C 可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数

函数名相同的两个函数,即使在不同文件,但是他们的实现一定要是相同的.否则会有未定义的行为,所以建议把内联函数放在头文件,这样就不需要程序猿去拷贝了.也就只有一个定义了.

D 定义在Class声明内的成员函数默认是inline函数

定义在类声明之中的成员函数将自动地成为内联函数

E 优先使用Class声明内定义的inline函数
F 优先使用Class实现的内inline函数的实现

inline 关键字没有优先级的功能

编程题

编程题1:排序子序列

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。

牛牛有一个长度为n 的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他 最少 可以把这个数组分为几段排序子序列.

例:数组A划分为[1,2,3] 和 [2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出:2

输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字

输出描述:输出一个整数表示牛牛可以将A最少划分为多少段排序子序列

输入 6
1 2 3 2 2 1
输出 :2

题目分析:在第一次看题的时候感觉题特别矛盾,要求子序列是非递增的,那例题给出数组 1 2 3 不就是递增的吗?在这个问题上就纠结了好久,我感觉我语文水平不是很高~~!!后来才明白子序列的要求是非递增或者非递减,只要满足其中一个要求就是 子序列了。还有一个注意的就是:非递增并不等于与递减,而非递减也并不等于递增…意思就是,1 2 2 2 并不是递增,但它是非递减;用数学角度来看 a(N) =< a(N+1) 就是非递减,而递增是 a(N) < a(N+1);

思路分析:根据题意的分析,所分割出来的数组是非递增或者非递减的,
在这里插入图片描述
例如这个数列:红框前面都是非递减的,这里突然递减了,所以 红框这里必须要分开,反之也是一样,如果前面的数列是非递增的,然后突然出现了比前一个小的数字就必须分开;

#include <iostream>
#include <vector>
using namespace std;

int main(){
   
    int n;
    while(cin>>n){
   
        vector<int>v(n,0);
        for(int i=0;i<n;++i)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值