C/C++每日一练(20230517) 排序问题、查找小值、寻找峰值

简介: C/C++每日一练(20230517) 排序问题、查找小值、寻找峰值

1. 排序问题


输入10个数,按绝对值从大到小排序输出。


输入形式:输入10个float实数


输出形式:保留小数点后两位有效数字;输出从大到小排列


以下程序实现了这一功能,请你填补空白处的内容:

```c++
#include <math.h>
#include <stdio.h>
void paixu(float *p, int n)
{
    int i, j;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (fabs(p[j]) < fabs(p[j + 1]))
            {
                float tmp;
                _______________;
            }
        }
    }
}
int main()
{
    float f[10];
    int i;
    for (i = 0; i < 10; i++)
        scanf("%f", &f[i]);
    paixu(f, 10);
    for (i = 0; i < 10; i++)
        printf("%.2f ", f[i]);
    return 0;
}
```



出处:

https://edu.csdn.net/practice/28002599

代码:

#include <math.h>
#include <stdio.h>
void paixu(float *p, int n)
{
    int i, j;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (fabs(p[j]) < fabs(p[j + 1]))
            {
                float tmp;
                tmp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = tmp;
            }
        }
    }
}
int main()
{
    float f[10];
    int i;
    for (i = 0; i < 10; i++)
        scanf("%f", &f[i]);
    paixu(f, 10);
    for (i = 0; i < 10; i++)
        printf("%.2f ", f[i]);
    return 0;
}

输出:


2. 输入一个数查找比它小的元素


一个整型数组有10元素,请先给这10个元素赋值,然后随便输入一个数,最后输出数组中比这个数小的所有元素,每个数用空格隔开,如果没有找到,则输出not find。


ca7823918ff2609bfc9edc9c4d84ab3c.jpeg


以下程序实现了这一功能,请你填补空白处内容:

```c++

#include <stdio.h>
int main()
{
    int a[10], i, n;
    int isfind = 0;
    printf("please set array values:");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    printf("please enter one num:");
    scanf("%d", &n);
    for (i = 0; i < 10; i++)
    {
        ______________;
    }
    if (isfind)
        printf("\n");
    else
        printf("not find\n");
    return 0;
}
```

出处:

https://edu.csdn.net/practice/28002600

代码:

#include <stdio.h>
int main()
{
    int a[10], i, n;
    int isfind = 0;
    printf("please set array values:");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    printf("please enter one num:");
    scanf("%d", &n);
    for (i = 0; i < 10; i++)
    {
        if (a[i] < n)
        {
            isfind = 1;
            printf("%d ", a[i]);
        }
    }
    if (isfind)
        printf("\n");
    else
        printf("not find\n");
    return 0;
}

输出:


3. 寻找峰值


峰值元素是指其值严格大于左右相邻值的元素。


给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。


你可以假设 nums[-1] = nums[n] = -∞ 。


你必须实现时间复杂度为 O(log n) 的算法来解决此问题。


示例 1:

输入:nums = [1,2,3,1]

输出:2

解释:3 是峰值元素,你的函数应该返回其索引 2。


示例 2:

输入:nums = [1,2,1,3,5,6,4]

输出:1 或 5  

解释:你的函数可以返回索引 1,其峰值元素为 2;


    或者返回索引 5, 其峰值元素为 6。

提示:

   1 <= nums.length <= 1000

   -2^31 <= nums[i] <= 2^31 - 1

   对于所有有效的 i 都有 nums[i] != nums[i + 1]

出处:

https://edu.csdn.net/practice/28002601

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    int findPeakElement(vector<int> &nums)
    {
        int l = 0, r = nums.size() - 1;
        while (l < r)
        {
            int mid = l + (r - l) / 2;
            if (nums[mid] > nums[mid + 1])
            {
                if (mid == 0 || nums[mid] > nums[mid - 1])
                    return mid;
                else
                    r = mid;
            }
            else
            {
                if (mid + 1 == nums.size() - 1 || nums[mid + 1] > nums[mid + 2])
                    return mid + 1;
                else
                    l = mid + 1;
            }
        }
        return l;
    }
};
int main()
{
  Solution s;
  vector<int> nums = {1,2,3,1};
  cout << s.findPeakElement(nums) << endl;
  nums = {1,2,1,3,5,6,4};
  cout << s.findPeakElement(nums) << endl;
  return 0; 
}


输出:

2

5


目录
打赏
0
0
0
0
74
分享
相关文章
【C++数据结构——内排序】二路归并排序(头歌实践教学平台习题)【合集】
本关任务是实现二路归并算法,即将两个有序数组合并为一个有序数组。主要内容包括: - **任务描述**:实现二路归并算法。 - **相关知识**: - 二路归并算法的基本概念。 - 算法步骤:通过比较两个有序数组的元素,依次将较小的元素放入新数组中。 - 代码示例(以 C++ 为例)。 - 时间复杂度为 O(m+n),空间复杂度为 O(m+n)。 - **测试说明**:平台会对你编写的代码进行测试,提供输入和输出示例。 - **通关代码**:提供了完整的 C++ 实现代码。 - **测试结果**:展示代码运行后的排序结果。 开始你的任务吧,祝你成功!
39 10
【C++数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】
本文介绍了希尔排序算法的实现及相关知识。主要内容包括: - **任务描述**:实现希尔排序算法。 - **相关知识**: - 排序算法基础概念,如稳定性。 - 插入排序的基本思想和步骤。 - 间隔序列(增量序列)的概念及其在希尔排序中的应用。 - 算法的时间复杂度和空间复杂度分析。 - 代码实现技巧,如循环嵌套和索引计算。 - **测试说明**:提供了测试输入和输出示例,帮助验证代码正确性。 - **我的通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了代码运行的测试结果。 通过这些内容,读者可以全面了解希尔排序的原理和实现方法。
62 10
|
2月前
|
【C++数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
快速排序是一种高效的排序算法,基于分治策略。它的主要思想是通过选择一个基准元素(pivot),将数组划分成两部分。一部分的元素都小于等于基准元素,另一部分的元素都大于等于基准元素。然后对这两部分分别进行排序,最终使整个数组有序。(第一行是元素个数,第二行是待排序的原始关键字数据。本关任务:实现快速排序算法。开始你的任务吧,祝你成功!
49 7
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
47 5
【C++】sort()、stable_sort()和partial_sort()排序函数详解
【C++】sort()、stable_sort()和partial_sort()排序函数详解
273 0
|
9月前
|
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
102 1
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
|
10月前
|
Linux 终端操作命令(1)
Linux 终端操作命令(1)
119 1
Linux 终端操作命令(1)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等