zoukankan      html  css  js  c++  java
  • 判断这5个数值是否连续相邻

    题目:http://fayaa.com/tiku/view/109/

    ————————————————————————————————————————————————

    一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现。

    请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻

    注意:

    • 5个数值允许是乱序的。比如: 8 7 5 0 6
    • 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
    • 0可以多次出现。
    • 复杂度如果是O(n2)则不得分。

    ————————————————————————————————————————————————

    解题思路:

    1.取5个数中非0的最大数和最小数,之差不大于4则连续,否则不连续。 

    2.要增加两个特例: 1)全0 算连续,2)只有一个非0算连续

    代码实例

    View Code
    /*
    http://fayaa.com/tiku/view/109/
    */
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    
    int check(int arry[5])
    {
        int max=0,min=65535;
        int zerocount=0;
        for(int i=0;i<5;i++)
        {
            if(arry[i]==0)
                zerocount++;
            else
            {
                if(arry[i]>max)
                    max=arry[i];
                if(arry[i]<min)
                    min=arry[i];
            }
        }
        if(zerocount>=4)
            return 1;
        else
        {
            if(max-min<=4)
                return 1;
            else 
                return 0;
        }
    
    
    }
    
    int main()
    {
        int arry[5];
        cout<<"一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现"<<endl;
        for(int i=0;i<5;i++)
            cin>>arry[i];
        int p=check(arry);
        if(p)
            cout<<"连续"<<endl;
        else
            cout<<"不连续"<<endl;
    
        system("pause");
    
    }

    输入: 1 2 3 0 5

    输出:连续

     

    作者:xwdreamer
    欢迎任何形式的转载,但请务必注明出处。
    分享到:
  • 相关阅读:
    vscode安装使用
    文本相似度编辑距离
    lstm有浅入深
    去除数组对象中重复的对象
    ANGULAR :NGIF 的ELSE用法
    数组中去除重复的对象的简单方法
    自然数e的野史来历和计算方法
    VSCode
    Ubuntu
    Ubuntu
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2296993.html
Copyright © 2011-2022 走看看