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

  1. enum {
  2. DATA_SIZE = ,
  3. };
  4.  
  5. enum enum_status {
  6. STATUS_FOUND = ,
  7. STATUS_ERR,
  8. STATUS_NOT_FOUND, //ALL 'X'
  9. };
  10.  
  11. enum_status findOOX(int data[DATA_SIZE], int start, int& index) {
  12. for(int i = start; i < DATA_SIZE - ; i++) {
  13. if(data[i] == 'O' && data[i + ] == 'O' && data[i + ] == 'X') {
  14. index = i;
  15. return STATUS_FOUND;
  16. }
  17.  
  18. if(data[i] == 'O' && (data[i + ] != 'O' || data[i + ] != 'X')) {
  19. index = i;
  20. return STATUS_ERR;
  21. }
  22. }
  23. return STATUS_NOT_FOUND;
  24. }
  25.  
  26. bool findO(int data[DATA_SIZE], int start, int& index) {
  27. for(int i = start; i < DATA_SIZE; i++) {
  28. if(data[i] == 'O') {
  29. index = i;
  30. return true;
  31. }
  32. }
  33. return false;
  34. }
  35.  
  36. int test_main(int data[DATA_SIZE]) {
  37. enum_status stat = STATUS_NOT_FOUND;
  38. int count = ;
  39. int index = ;
  40.  
  41. for(int i = ; i < DATA_SIZE; i++) {
  42. stat = findOOX(data, i, index);
  43. if(stat == STATUS_NOT_FOUND) {
  44. break;
  45. }
  46.  
  47. if(stat == STATUS_ERR) {
  48. i = index; //TODO
  49. continue;
  50. }
  51. i = index + ;
  52.  
  53. stat = findOOX(data, i, index);
  54. if(stat == STATUS_NOT_FOUND) {
  55. break;
  56. }
  57.  
  58. if(stat == STATUS_ERR) {
  59. i = index; //TODO
  60. continue;
  61. }
  62. i = index + ;
  63.  
  64. if(findO(data, i, index)) {
  65. count++;
  66. i = index;
  67. }
  68. else {
  69. break;
  70. }
  71.  
  72. }
  73.  
  74. return count;
  75. }

用于生成测试用例的demo:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define SIZE 10000
  5.  
  6. int test_main(int data[SIZE]);
  7.  
  8. static int data[SIZE];
  9.  
  10. static void build_data(void)
  11. {
  12. for (int a = ; a < SIZE; a++)
  13. {
  14. data[a] = (rand() % ) ? 'O' : 'X';
  15. }
  16. }
  17.  
  18. void main(void)
  19. {
  20. for (int l = ; l < ; l++)
  21. {
  22. build_data();
  23.  
  24. printf("%d\n", test_main(data));
  25. }
  26. system("pause");
  27. }

OXPattern的更多相关文章

随机推荐

  1. CSS :focus 伪类

    :focus -- CSS :focus 伪类,适用于已获取焦点的元素的样式 语法: :focus CSS版本:CSS2 说明: 适用于已获取焦点的元素的样式,例如:表单的input输入框可以输入文字 ...

  2. WPS去掉键入时自动进行句首字母大写更正

    1.单击左上角的菜单选项 2.选择上图中的“选项”按钮

  3. Centos7 install Openstack - (第三节)添加镜像服务(Glance)

    Centos7 install Openstack - (第三节)添加镜像服务(Glance) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack ...

  4. 二叉树之AVL树的平衡实现(递归与非递归)

    这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...

  5. socket学习笔记——IO口的基本操作(读、写)

    写操作 1 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unist ...

  6. 检测zookeeper和kafka是否正常

    cd $(dirname $) source ~/.bash_profile count_zoo=`ps -ef | grep "config/zookeeper.properties&qu ...

  7. django中添加用户

    在django中添加用户,直接在auth_user表中添加会有问题,因为这里密码是加密的,可以通过manage.py shell加入 创建User: 1 >>> from djang ...

  8. C++临时变量的生命周期

    C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量.主要的用途主要有两类: 1) 函数的返回值, 如: string proc() { return string(" ...

  9. 多XML追加操作

    假设要统计当前系统中所有的试卷进行分析,试卷是以XML格式存储的,所有这就需要将所有零散的XML文件整合起来,处理成一个完整的XML文件,进行分析, 下面是简单额处理方法: 当前XML文件格式: &l ...

  10. ionic 嵌套view 的方法

    我一直想在一个页面的同一个 DIV 里面嵌入一个不同的 HTML文件  ....但是总是没有达到我要的效果.....才发现原来我没有加一个 name 我用angular-ui 插件 里面的样式  总是 ...