每日一结

E-  刺激的山谷

给你一个n个整数的数组a[0...n-1]。如果存在恰好一个子数组a[l...r],使之成为一个 "谷"。

这里有三个例子。

  • 0≤l≤r≤n−1,
  • al​=al+1​=al+2​=⋯=ar​,
  • l=0 or  al-1>al
  • r=n−1 or ar

每日一结_第1张图片

第一张图片显示了数组[3,2,2,1,2,2,3],它是一个山谷,因为只有指数l=r=3的子数组满足条件。

第二张图片显示了数组[1,1,1,2,3,3,4,5,6,6,6],它是一个山谷,因为只有索引为l=0,r=2的子数组满足编码条件。

第三张图显示了数组[1,2,3,4,3,2,1],它不是一个山谷,因为有两个子数组l=r=0和l=r=6满足这个条件。

你被问及所给的数组是否是山谷。

请注意,我们认为数组的索引是从0开始的。

Input

第一行包含一个整数t(1<=t<=1e4)-测试案例的数量。

每个测试用例的第一行包含一个整数 n (1≤n≤2⋅105) --数组的长度。

每个测试用例的第二行包含n个整数ai​ (1≤ai​≤109) --数组的元素。

可以保证所有测试用例的n之和小于2⋅105.

Output

对于每个测试案例,如果数组是山谷,则输出 "YES"(不带引号),否则输出 "NO"(不带引号)。

你可以在任何情况下输出答案(例如,字符串 "yEs"、"yes"、"Yes "和 "YES "将被识别为一个肯定的答案)。

Sample 1

这道题主要考察的是思维逻辑的转变

解题思路:看到题目的时候,我首先想的问题是什么才是山谷,观察结合给出的例子,可以发现山谷大致分为俩种情况,一种为山两边构成的谷,一种是山与山之间的谷。在分出在两边的情况后,遵从先下坡后上坡的原则进行判断便能解决问题。要注意的是要找出其中的子数组,再用子数组的俩边进行判断,得出结果

具体代码如下:

#include
int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        int stu[200000];
        int n,j,k,l,r,sum=0;
        scanf("%d",&n);
        for(int i=0;i

数学黑洞

【问题描述】

任给一个4位正整数,其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多7步,必得6174。对任给的4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。

【输入】

一行,一个4位正整数n(1000< n<9999)

【输出】

掉进黑洞的步数

输入

1234

输出

3

题目不难,用的一种递归的解法

解题思路:首先题目已经给定是一个四位数,所以所需循环的次数也定下来了,将四位数各位放在一个数组之中,用两个大小排列的函数,对该数进行相减后,继续执行这轮操作直至得到目标数,最终返回函数调用次数的值

#include 
#include 
int min(int a[4]){              
    int z=0;
   for(int i=0;i<3;i++){            
    for(int j=0;j<3-i;j++){
       if(a[j]>a[j+1]){int t=a[j+1];a[j+1]=a[j];a[j]=t;
       }}}
for(int i=0;i<4;i++)z=10*z+a[i];   //返回四位组成最小数
return z;
}
int max(int a[4]){        
    int z=0;
   for(int i=0;i<3;i++){          
    for(int j=0;j<3-i;j++){
       if(a[j]

你可能感兴趣的:(c语言)