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。
以下程序实现了这一功能,请你填补空白处内容:
```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