从键盘输入5个单精度浮点数,若该5个数的数值大小是递减的,屏幕显示“该数列是递减数列“,否则显示“该数列不是递减数列”用c语言怎么表达
1个回答
关注
展开全部
当 0 ≤ i ≤ n ? 2 0 \le i \le n-20≤i≤n?2 且 nums [ i ] > nums [ i + 1 ] \textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1] 时,为了消除逆序关系,应该将 nums [ i ] \textit{nums}[i]nums[i] 的值改成小于等于 nums [ i + 1 ] \textit{nums}[i+1]nums[i+1] 的值,或者将 nums [ i + 1 ] \textit{nums}[i+1]nums[i+1] 的值改成大于等于 nums [ i ] \textit{nums}[i]nums[i] 的值,在更改元素值之后,应该满足:nums [ i ? 1 ] ≤ nums [ i ] ≤ nums [ i + 1 ] ≤ nums [ i + 2 ] \textit{nums}[i-1] \le \textit{nums}[i] \le \textit{nums}[i+1] \le \textit{nums}[i+2]nums[i?1]≤nums[
咨询记录 · 回答于2023-01-03
从键盘输入5个单精度浮点数,若该5个数的数值大小是递减的,屏幕显示“该数列是递减数列“,否则显示“该数列不是递减数列”用c语言怎么表达
亲亲您好,很高兴为您解答~解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。思路:贪心。前中后同时比较,注意初始值另外比较。不能前后两个比较,反例:[3,4,2,3]
代码:
拓展资料:示例 1:输入:nums = [4,2,3] \texttt{nums = [4,2,3]}nums = [4,2,3]输出:true \texttt{true}true解释:你可以通过把第一个 4 \texttt{4}4 变成 1 \texttt{1}1 来使得它成为一个非递减数列。示例 2:输入:nums = [4,2,1] \texttt{nums = [4,2,1]}nums = [4,2,1]输出:false \texttt{false}false解释:你不能在只改变一个元素的情况下将其变为非递减数列。数据范围1 ≤ n ≤ 10 4 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{4}1≤n≤10 4 -10 5 ≤ nums[i] ≤ 10 5 \texttt{-10}^\texttt{5} \le \texttt{nums[i]} \le \texttt{10}^\texttt{5}-10 5 ≤nums[i]≤10 5
解法思路和算法为了保证数组 nums \textit{nums}nums 是非递减的,只有当 nums [ i ] > nums [ i + 1 ] \textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1](其中 0 ≤ i ≤ n ? 2 0 \le i \le n-20≤i≤n?2)时,才需要改变 nums [ i ] \textit{nums}[i]nums[i] 或 nums [ i + 1 ] \textit{nums}[i+1]nums[i+1] 的值,将数组 nums \textit{nums}nums 变成非递减数列。假设有两个下标 i ii 和 j jj 满足 0 ≤ i < j ≤ n ? 2 0 \le i nums [ j + 1 ] \textit{nums}[i]>\textit{nums}[i+1],\textit{nums}[j]>\textit{nums}[j+1]n
理由如下:当 i + 1 = j i+1=ji+1=j 时,j + 1 = i + 2 j+1=i+2j+1=i+2,因此 nums [ i ] > nums [ i + 1 ] > nums [ i + 2 ] \textit{nums}[i]>\textit{nums}[i+1]>\textit{nums}[i+2]nums[i]>nums[i+1]>nums[i+2],其中有 3 33 组逆序关系(i ii 和 i + 1 i+1i+1、i + 1 i+1i+1 和 i + 2 i+2i+2、i ii 和 i + 2 i+2i+2),只改变其中的 1 11 个元素,无法消除另外 2 22 个元素之间的逆序关系;当 i + 1 < j i+1
根据上述分析可知,在最多改变 1 11 个元素的情况下,数组 nums \textit{nums}nums 可以变成非递减数组的必要条件是:最多存在一个 i ∈ [ 0 , n ? 2 ] i \in [0,n-2]i∈[0,n?2],使得 nums [ i ] > nums [ i + 1 ] \textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1]。该条件记为「条件一」。
当 0 ≤ i ≤ n ? 2 0 \le i \le n-20≤i≤n?2 且 nums [ i ] > nums [ i + 1 ] \textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1] 时,为了消除逆序关系,应该将 nums [ i ] \textit{nums}[i]nums[i] 的值改成小于等于 nums [ i + 1 ] \textit{nums}[i+1]nums[i+1] 的值,或者将 nums [ i + 1 ] \textit{nums}[i+1]nums[i+1] 的值改成大于等于 nums [ i ] \textit{nums}[i]nums[i] 的值,在更改元素值之后,应该满足:nums [ i ? 1 ] ≤ nums [ i ] ≤ nums [ i + 1 ] ≤ nums [ i + 2 ] \textit{nums}[i-1] \le \textit{nums}[i] \le \textit{nums}[i+1] \le \textit{nums}[i+2]nums[i?1]≤nums[
有没有简单一点的代码
这个有点复杂
亲亲,没有了,我这是找的最简单的,代码这个东西本来就很复杂,