OXPattern
10000的随机数组由ox组成,查找数组中oox...x(任意x)oox....x(任意x)o的个数
- enum {
- DATA_SIZE = ,
- };
- enum enum_status {
- STATUS_FOUND = ,
- 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 - ; i++) {
- if(data[i] == 'O' && data[i + ] == 'O' && data[i + ] == 'X') {
- index = i;
- return STATUS_FOUND;
- }
- if(data[i] == 'O' && (data[i + ] != 'O' || data[i + ] != '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 = ;
- int index = ;
- for(int i = ; 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 + ;
- stat = findOOX(data, i, index);
- if(stat == STATUS_NOT_FOUND) {
- break;
- }
- if(stat == STATUS_ERR) {
- i = index; //TODO
- continue;
- }
- i = index + ;
- 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 = ; a < SIZE; a++)
- {
- data[a] = (rand() % ) ? 'O' : 'X';
- }
- }
- void main(void)
- {
- for (int l = ; l < ; l++)
- {
- build_data();
- printf("%d\n", test_main(data));
- }
- system("pause");
- }
OXPattern的更多相关文章
随机推荐
- CSS :focus 伪类
:focus -- CSS :focus 伪类,适用于已获取焦点的元素的样式 语法: :focus CSS版本:CSS2 说明: 适用于已获取焦点的元素的样式,例如:表单的input输入框可以输入文字 ...
- WPS去掉键入时自动进行句首字母大写更正
1.单击左上角的菜单选项 2.选择上图中的“选项”按钮
- Centos7 install Openstack - (第三节)添加镜像服务(Glance)
Centos7 install Openstack - (第三节)添加镜像服务(Glance) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack ...
- 二叉树之AVL树的平衡实现(递归与非递归)
这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...
- socket学习笔记——IO口的基本操作(读、写)
写操作 1 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unist ...
- 检测zookeeper和kafka是否正常
cd $(dirname $) source ~/.bash_profile count_zoo=`ps -ef | grep "config/zookeeper.properties&qu ...
- django中添加用户
在django中添加用户,直接在auth_user表中添加会有问题,因为这里密码是加密的,可以通过manage.py shell加入 创建User: 1 >>> from djang ...
- C++临时变量的生命周期
C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量.主要的用途主要有两类: 1) 函数的返回值, 如: string proc() { return string(" ...
- 多XML追加操作
假设要统计当前系统中所有的试卷进行分析,试卷是以XML格式存储的,所有这就需要将所有零散的XML文件整合起来,处理成一个完整的XML文件,进行分析, 下面是简单额处理方法: 当前XML文件格式: &l ...
- ionic 嵌套view 的方法
我一直想在一个页面的同一个 DIV 里面嵌入一个不同的 HTML文件 ....但是总是没有达到我要的效果.....才发现原来我没有加一个 name 我用angular-ui 插件 里面的样式 总是 ...