• OXPattern


    10000的随机数组由ox组成,查找数组中oox...x(任意x)oox....x(任意x)o的个数

    enum {
        DATA_SIZE = 10000,
    };
    
    enum enum_status {
        STATUS_FOUND = 0,
        STATUS_ERR,
        STATUS_NOT_FOUND, //ALL 'X'
    };
    
    enum_status findOOX(int data[DATA_SIZE], int start, int& index) {
        for(int i = start; i < DATA_SIZE - 2; i++)     {
            if(data[i] == 'O' && data[i + 1] == 'O' && data[i + 2] == 'X') {
                index = i;
                return STATUS_FOUND;
            }
    
            if(data[i] == 'O' && (data[i + 1] != 'O' || data[i + 2] != 'X'))         {
                index = i;
                return STATUS_ERR;
            }
        }
        return STATUS_NOT_FOUND;
    }
    
    bool findO(int data[DATA_SIZE], int start, int& index) {
        for(int i = start; i < DATA_SIZE; i++)     {
            if(data[i] == 'O')         {
                index = i;
                return true;
            }
        }
        return false;
    }
    
    int test_main(int data[DATA_SIZE]) {
        enum_status stat = STATUS_NOT_FOUND;
        int count = 0;
        int index = 0;
    
        for(int i = 0; i < DATA_SIZE; i++)     {
            stat = findOOX(data, i, index);
            if(stat == STATUS_NOT_FOUND)         {
                break;
            }
    
            if(stat == STATUS_ERR)         {
                i = index;  //TODO
                continue;
            }
            i = index + 3;
    
            stat = findOOX(data, i, index);
            if(stat == STATUS_NOT_FOUND)         {
                break;
            }
    
            if(stat == STATUS_ERR)         {
                i = index;  //TODO
                continue;
            }
            i = index + 3;
    
            if(findO(data, i, index))        {
                count++;
                i = index;
            }
            else         {
                break;
            }
            
        }
    
        return count;
    }

     用于生成测试用例的demo:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define  SIZE 10000
    
    int test_main(int data[SIZE]);
    
    static int data[SIZE];
    
    static void build_data(void)
    {
        for (int a = 0; a < SIZE; a++)
        {
            data[a] = (rand() % 2) ? 'O' : 'X';
        }
    }
    
    
    void main(void)
    {
        for (int l = 0; l < 10; l++)
        {
            build_data();
    
            printf("%d
    ", test_main(data));
        }
        system("pause");
    }
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    IPC总结学习
    机器学习中的范数规则
    机器学习的几个误区-转载
    来几道大数据的面试题吧
    海量数据随机抽样问题(蓄水池问题)
    字符串类算法题目总结
    RPC学习
    如何做出健壮的系统设计
    关于bind函数和connect函数的测试结论
    [置顶] Codeforces Round #197 (Div. 2)(完全)
  • 原文地址:https://www.cnblogs.com/linux0537/p/6074795.html
Copyright © 2020-2023  润新知