zoukankan      html  css  js  c++  java
  • 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");
    }
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    Android之退出整个应用方法
    自定义popupwindow(解决位置控制困惑)
    日期格式转换
    简单用于测试的listview的视图
    复制res下文件进sd卡
    自定义九宫格式的弹出menu
    动画隐藏或者显示控件
    截取p3片段
    微信几种动画进入退出应用
    codeforce Round On Sum of Fractions + stl 的应用
  • 原文地址:https://www.cnblogs.com/linux0537/p/6074795.html
Copyright © 2011-2022 走看看