目录
第一题-选择题1
答案:6789
思路:
首先p指向9的下标,然后p指向6的下标,打印的时候从6开始向后依次打印
第二题-选择题2
答案:f
思路:
prt最开始指向a,+5后指向f
第三题-选择题3
答案:1 0 2
思路:
题目说是小端,所以低位存低地址,由于是long long类型,所以abc存储如下
a: 01 00 00 00 00 00 00 00
b: 02 00 00 00 00 00 00 00
c: 03 00 00 00 00 00 00 00
函数栈帧是从高地址向低地址开辟的,并且调用printf函数时从右向左入栈,所以c最先入栈,然后打印方式是%d(一次打印四个字节),所以获取方式如下
第四题-字符串中找出连续最长的数字串
思路:
定义一个临时字符串cur和最后返回字符串ret,依次遍历str,将遇到的数字串整个放到cur中,整个数字串结束后将cur与ret中数字串长度对比,如果cur长度比ret长则将cur中数字串拷贝到ret中,否则就清空cur中的数字串
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str, cur, ret;
getline(cin, str);
//依次遍历整行,取=防止最长数字串在最后
for(int i = 0; i <= str.size(); ++i)
{
//如果是数字串则将它存放到cur中
if(str[i] >= '0' && str[i] <= '9')
{
cur += str[i];
}
else
{
//如果cur当中存放的数字串比ret长,那么将cur中数字串放到ret中,并将cur清除
if(cur.size() > ret.size())
{
ret = cur;
cur.clear();
}
else
{
cur.clear();
}
}
}
cout << ret << endl;
}
第五题-超过长度一半的数字
思路:
1.将整个数组排序,然后取出中间的数字,然后遍历数组,计算中间数字出现的字数然后比较
2.依次比较两个数,如果两个数不相等就消去这两个数,每次消去一个众数和一个非众数,如果存在众数,那么最后留下来的就是众数
//1.将整个数组排序,然后取出中间的数字,然后遍历数组,计算中间数字出现的字数然后比较
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty())return 0;
sort(numbers.begin(), numbers.end());
int midnumber = numbers[numbers.size()/2];
int count = 0;
for(int i = 0; i < numbers.size(); ++i)
{
if(midnumber == numbers[i])
{
count++;
}
}
return midnumber;
}
};
//2.众数和非众数写法
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty())return 0;
//首先取出第一个数字作为result,同时记录出现次数time为1
int result = numbers[0];
int time = 1;
//依次遍历所有数组
for(int i = 1; i < numbers.size(); ++i)
{
//time不为0说明众数目前多余非众数
if(time != 0)
{
//如果当前数字和当前认定众数不相等则将这两个数字消除,否则增加众数次数
if(result != numbers[i])
{
time--;
}
else
{
time++;
}
}
//如果time为0说明此时众数和非众数全部抵消了,所以重新选取众数
else
{
result = numbers[i];
time = 1;
}
}
return result;
}
};