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


目录
相关文章
|
7月前
|
人工智能 算法 测试技术
【数学】【排序】【C++算法】3027人员站位的方案数
【数学】【排序】【C++算法】3027人员站位的方案数
|
7月前
|
算法 搜索推荐 C++
【C++】sort()、stable_sort()和partial_sort()排序函数详解
【C++】sort()、stable_sort()和partial_sort()排序函数详解
167 0
|
6月前
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
|
6月前
|
算法 搜索推荐 C++
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
|
7月前
|
算法 测试技术 C#
【模拟】【C++算法】2826. 将三个组排序
【模拟】【C++算法】2826. 将三个组排序
|
7月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
99 1
Linux 终端操作命令(1)
|
7月前
|
算法 测试技术 C++
【广度优先搜索】【拓扑排序】【C++算法】913. 猫和老鼠
【广度优先搜索】【拓扑排序】【C++算法】913. 猫和老鼠
|
7月前
|
机器学习/深度学习 算法 调度
拓扑排序解析:计算机与数学的交汇点以及C++ 实现
拓扑排序解析:计算机与数学的交汇点以及C++ 实现
185 0
|
7月前
|
算法 搜索推荐 大数据
在C++语言中排序、查找和算法的作用
在C++语言中排序、查找和算法的作用
36 0
|
7月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
61 0
Linux 终端命令之文件浏览(4) head, tail