每日刷题-2

这篇具有很好参考价值的文章主要介绍了每日刷题-2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、选择题

二、编程题

1、倒置字符串

2、排序子序列

3、字符串中找出连续最长的数字串

4、数组中出现次数超过一半的数字



一、选择题

1、

每日刷题-2,笔试题目练习,c++,开发语言

题目解析:

二维数组初始化的一般形式是:

数据类型 数组名[常量表达式1][常量表达式2] = {初始化数据};

其中,常量表达式1和常量表达式2分别表示数组的行数和列数,初始化数据用花括号括起来,每一行的数据用逗号分隔,每一行的末尾可以加上分号。如果初始化数据的个数少于数组的元素个数,那么剩余的元素会被自动赋值为0。如果省略常量表达式1,那么编译器会根据初始化数据的个数自动推断出数组的行数。如果省略常量表达式2,那么编译器会报错。故答案为B。

2、每日刷题-2,笔试题目练习,c++,开发语言

题目解析:(1)使用return语句返回一个包含多个值的结构体或者数组;

(2)使用指针或者引用作为函数的形参,通过修改指针或者引用指向的变量来返回多个值;

(3)使用静态变量或者全局变量来存储多个返回值,然后在主调函数中访问它们。

其中,第一种方法和第二种方法是比较常见和推荐的,因为它们可以保证函数的封装性和可重用性,也可以避免潜在的错误和冲突。第三种方法是不建议使用的,因为它会破坏函数的封装性和可重用性,也会增加程序的复杂度和维护成本。

3、

每日刷题-2,笔试题目练习,c++,开发语言

题目解析:int *p[4].是一个指针数组..它表示一个含有4个元素的数组每个元素都是一个指向int类型的指针。由于“[]”的优先级高于“*”,所以p先和“[]”结合再和“*”结合,所以答案为C。

4、

每日刷题-2,笔试题目练习,c++,开发语言

题目解析:long long类型在32位机器上占用8个字节,也就是64位1;little endian表示低位字节存放在低地址,高位字节存放在高地址。当printf函数打印一个long long类型的变量时,它会把这个变量的8个字节分成两个4字节的部分,然后从低地址处开始读取第一个部分,再读取第二个部分。每个部分都可以看作一个int类型的数。因此,变量a的值为1,在内存中的存储方式为01 00 00 00 00 00 00 00,其中01是低位字节,存放在低地址处。当printf函数打印a时,它会从低地址处开始读取4个字节,也就是01 00 00 00,转换为十进制就是1。注意了,此时a还有4个字节没有被读取,打印b的时候,变量b的值为2,在内存中的存储方式为02 00 00 00 00 00 00 00,其中02是低位字节,存放在低地址处。当printf函数打印b时,它会从低地址处开始读取4个字节,也就是02 00 00 00,但是因为前面的4个字节,所以02变成了第五个字节,所以打印出来是0变量c的值为3,在内存中的存储方式为03 00 00 00 00 00 00 00,其中03是低位字节,存放在低地址处。当printf函数打印c时,它会从低地址处开始读取4个字节,也就是03 00 00 00,转换为十进制就是2。这是因为03是第9个字节,而不是第一个字节,所以它的权值为2。

二、编程题

1、倒置字符串

每日刷题-2,笔试题目练习,c++,开发语言

分析题目:先将整个字符串逆置过来,再遍历字符串,找出每个单词,对单词逆置。这里我们使用了stl算法中的reverse,所以这里使用迭代器遍历string。

代码如下:

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;

int main() {
    string str;
    while (getline(cin, str)) {
        reverse(str.begin(), str.end()); //整体逆置
        auto start = str.begin();
        while (start != str.end()) {
            auto end = start;
            while (*end != ' ' && *end != '\0') {
                end++;
            }
            reverse(start, end);
            if (end != str.end())
                start = end + 1;
            else
                start = end;
        }
        cout << str << endl;
    }

}

知识点:begin()函数返回一个迭代器,指向字符串的第一个元素。例如,如果有一个字符串string str= "He11o";,那么str.begin()就指向'H’这个字符。end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置)。例如,如果有一个字符串string str = "Hello";,那么str.end()就指向'\0’这个空字符,它是字符串的结束标志。这两个函数的范围是左闭右开的,也就是说,它们包含了字符串的第一个元素,但不包含最后一个元素

reverse 函数的范围是左闭右开的,也就是说,它包含了start指向的元素,但不包含指向end的元素。这个范围可以用中括号表示为[start,end)。例如,如果有一个数组int arr [] = (1,2,3,4,5};,那么reverse (arr + 1, arr + 4);就会翻转数组索引[1,4)的区域,也就是2,3,4这三个元素,翻转后的数组变为{1,4,3,2,5}。

2、排序子序列

每日刷题-2,笔试题目练习,c++,开发语言

题目分析:非递减就是a[i]<=a[i+1],递减就是a[i]>a[i+1],非递增就是a[i]>=a[i+1],递增就是a[i]<a[i+1]。

  • 首先,我们需要定义一个flag变量,用来记录当前的排序状态,初始值为0。如果flag为0,表示还没有确定排序状态;如果flag为1,表示当前是非递减排序;如果flag为-1,表示当前是非递增排序。
  • 然后,我们遍历数组A,比较相邻的两个元素的大小关系。如果A[i] < A[i+1],表示当前是升序;如果A[i] > A[i+1],表示当前是降序;如果A[i] == A[i+1],表示当前没有变化。
  • 接下来,我们根据flag的值和当前的大小关系来判断是否需要分割子序列。如果flag为0,表示还没有确定排序状态,那么我们就根据当前的大小关系来更新flag的值,并且不需要分割子序列。如果flag为1,表示当前是非递减排序,那么我们就判断当前是否是降序,如果是降序,那么我们就需要分割子序列,并且把flag的值更新为-1;如果不是降序,那么我们就不需要分割子序列。如果flag为-1,表示当前是非递增排序,那么我们就判断当前是否是升序,如果是升序,那么我们就需要分割子序列,并且把flag的值更新为1;如果不是升序,那么我们就不需要分割子序列。
  • 最后,我们统计分割出来的子序列的个数,就是最少可以把数组A分为几段排序子序列的答案
  • 代码如下:
#include <iostream>
#include<vector>
using namespace std;

int main() {
    int n = 0;
    while (cin >> n) {
        vector<int> list;
        int count = 1;
        int flag = 0;
        list.resize(n);
        for (int i = 0; i < n; i++) {
            cin >> list[i];
        }
        for (int i = 0; i < n - 1; i++) {
            if (flag == 0) 
            {
                if (list[i] == list[i + 1])continue;
                else if (list[i] < list[i + 1])
                flag = 1;
                else 
                flag = -1;
            } 
            else if (flag == 1) 
            {
                if (list[i] > list[i + 1]) 
                {
                    count++;
                    flag = 0;

                }

            } else 
            {
                if (list[i] < list[i + 1])
                {
                    count++;
                    flag = 0;
                }
            }
        }
        cout << count << endl;
    }
}

3、字符串中找出连续最长的数字串

每日刷题-2,笔试题目练习,c++,开发语言

题目分析:遍历字符串,使用cur去记录连续的数字串,如果遇到不是数字字符,则表示一个连续的数字串结束了,则将数字串跟之前的数字串比较,如果更长,则更新更长的数字串更新到res。

#include <iostream>
#include<string>
#include<algorithm>

using namespace std;

int main() {
    string str, res, cur;
    cin>>str;

    for (int i = 0; i < str.length()+1; i++) 
    {
        if (str[i] >= '0' && str[i] <= '9') 
        {
            cur += str[i];
        } 
        else {// 找出更长的字符串,则更新字符串

            if (res.size() < cur.size())
                res = cur;
            else
                cur.clear();
        }
    }
    cout<<res;

}

4、数组中出现次数超过一半的数字

每日刷题-2,笔试题目练习,c++,开发语言

题目分析:

思路一:数组排序后,如果符合条件的数存在,则一定是数组中间那个数。这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优;

lass Solution {
  public:
    int MoreThanHalfNum_Solution(vector<int>& numbers) {

        sort(numbers.begin(), numbers.end());
        int middle = numbers[numbers.size() / 2];
        int count = 0; // 出现次数
        for (int i = 0; i < numbers.size(); ++i) {
            if (numbers[i] == middle) ++count;
        }
        return (count > numbers.size() / 2) ? middle : 0;

    }
};

思路二:就是出现次数超过数组长度一半的那个数字
如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。文章来源地址https://www.toymoban.com/news/detail-699501.html

class Solution {
  public:
    int MoreThanHalfNum_Solution(vector<int>& numbers) 
    {
        int times=1;
        int result=numbers[0];
        for(int i=1;i<numbers.size();i++)
        {
            if(numbers[i]!=result)
            {
                if(times==0)
                {
                    result=numbers[i];
                }
                else
                 {
                times--;
                }   
            }
            else {
                times++;
                result=numbers[i];
            
            }
        }
return result;
    }
};

到了这里,关于每日刷题-2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】

    目录 猜名次问题 典例题目 题目分析: 代码实现: 运行结果: 猜凶手问题  典例题目 题目分析 代码实现: 运行结果: 猜名次: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二;

    2024年02月07日
    浏览(35)
  • C语言刷题中遇到的一些很看重数学逻辑的题目(代码很简单,但是逻辑确实异曲同工)

    这一题的关键就是flat1和flat2两个变量的设立 flat1判断整个序列是否升序,比较相邻两个数,如果前者小于后者,则将flat1赋值为1 flat2判断整个序列是否升序,比较相邻两个数,如果前者大于后者,则将flat1赋值为1 然而整个序列有序的条件就是相邻的两个数一直是前者大于后

    2024年02月13日
    浏览(91)
  • 【刷题笔记8.10】LeetCode题目:有效括号

    给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号 首先,解决此题,我们要明确使用 栈

    2024年02月13日
    浏览(33)
  • 【刷题笔记8.8】LeetCode题目:两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是, 数组中同一个元素在答案里不能重复出现 。 你可以按任意顺序返回答案。 解法1:使用HashMap对数

    2024年02月13日
    浏览(40)
  • Go的并发练习题目

    现在有4个协程,分别对应编号为1,2,3,4,每秒钟就有一个协程打印自己的编号,要求编写一个程序,让输出的编号总是按照1,2,3,4,1,2,3,4这样的规律一直打印下去 使用chan来实现程序的graceful shutdown,在程序退出之前来执行一些连接的关闭,文件的close相关操作。

    2024年01月20日
    浏览(58)
  • PYTHON-模拟练习题目集合

     🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Aileen_0

    2024年02月07日
    浏览(36)
  • 记录--Js基础练习题目

    提示:  document.write可以在页面中打印内容 br 在 html 中代表换行 ,   在 html 中代码空格   提示:使用循环 第一层 for 循环控制方格 , 第二层 for 循环控制方格里面放的芝麻数量   提示:输入值为数组,执行方法后要返回数组里面的所有数值的和 提示:使用switch 分情况处理

    2024年02月07日
    浏览(60)
  • JavaScript题目练习1

    1.for循环打印九九乘法表 2.打印倒三角形,十行十列 3.运用while/ do-while循环计算1~100之间所有整数的和  4.求数组中最大值    [2,4,63,54,34,6,67,35,16]  5.将数组[\\\'red\\\',\\\'green\\\',\\\'pink\\\',\\\'blue\\\']转换为字符串,并用|分割 结果:red|green|pink|blue| 6.数组反转[\\\'red\\\',\\\'green\\\',\\\'pink\\\',\\\'blue\\\',\\\'purple\\\'] 结果:

    2023年04月09日
    浏览(29)
  • 动态规划题目练习

    动态规划背包问题-CSDN博客 动态规划基础概念-CSDN博客 题目描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河

    2024年04月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包