免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: WHITLACK
打印 上一主题 下一主题

字符串处理 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-01-16 13:51 |只看该作者
原帖由 cookis 于 2009-1-16 13:29 发表
输入一个就在你的列表里查一下,如果有,就存起来(并且记录当前最大值)否则error, 输入结束后,将刚才数值列表中的最大值打印出来。



我还想确认,从最小值到最大值间没有漏掉给定数据中的数

比如1,5,6,12 但是中间没有8和9.4,我也要返回error

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
12 [报告]
发表于 2009-01-16 13:55 |只看该作者
输入  “1,5,9.4,12,6”时打印 “12”,少了6、8不算错?

论坛徽章:
0
13 [报告]
发表于 2009-01-16 14:03 |只看该作者
原帖由 hellioncu 于 2009-1-16 13:55 发表
输入  “1,5,9.4,12,6”时打印 “12”,少了6、8不算错?



算的,刚才笔误,谢谢提醒

论坛徽章:
0
14 [报告]
发表于 2009-01-16 14:08 |只看该作者
楞是看了半天才明白楼主意思,楼主这个表达可真不怎么样。

还有个问题,会有重复值吗?

论坛徽章:
0
15 [报告]
发表于 2009-01-16 14:12 |只看该作者
原帖由 Sorehead 于 2009-1-16 14:08 发表
楞是看了半天才明白楼主意思,楼主这个表达可真不怎么样。

还有个问题,会有重复值吗?



不会有重复值,如果输入有重复,就error好了
表达能力是不怎么样,呵呵

论坛徽章:
0
16 [报告]
发表于 2009-01-16 14:17 |只看该作者
原始数据是排序好的数?

论坛徽章:
0
17 [报告]
发表于 2009-01-16 14:19 |只看该作者
如果数据数量不多的话,就采用笨方法,使用字符串查找。首先得到数的个数,就可以确定初始序列字符串的结束位置,然后遍历输入序列中的数字,挨个在这段字符串中查找,一旦不存在,就输入error。同时用一个变量记录最大值即可。

如果数据量大的话,就把初始序列中前N个数字构建成一个二叉排序树或者平衡二叉树。

论坛徽章:
0
18 [报告]
发表于 2009-01-16 14:33 |只看该作者

回复 #17 Sorehead 的帖子

数据量不大,最多也就是不到15个数,大概方法我也知道
不过小弟C基础不好,兄弟能否给个例子?拜谢!

论坛徽章:
0
19 [报告]
发表于 2009-01-16 15:16 |只看该作者
有时间要求没? 如果没有应该不麻烦,算法复杂度O(N*M),如果有序,还可有优化下O(M * logN):
orig_array[N] = { 1, 5, 6, 8, 9.4, 12, 25, ... };
r_array[M] = { 1,5,6,8, ... };
mark = 0;
full = 0;
result = 0;
for (i = 0 upto M-1) {
  if ( (temp = look_for(r_array)) > mark ) {  /* look_for 找orig中的位置,返回数组下标 */
    full += temp - mark;
    mark = temp;
    result = r_array;
  } else {
     full--;  /* 确保r_array中不重复出现某个值, 如果重复出现请在上面的if中增加去除orig_array元素的部分 */
  }
}

if (full == 0) {
   return result;
} else {
   return "error";
}

论坛徽章:
0
20 [报告]
发表于 2009-01-16 15:29 |只看该作者
LZ说的是这个意思不?

  1. #include <vector>
  2. #include <algorithm>
  3. #include <stdio.h>


  4. int main(int argc, char **argv)
  5. {
  6.         int 所有小孩[ ] = { 7, 5, 6, 8, 94, 12, 25, 1, 36, 53 };
  7. #        define 所有小孩数        ( sizeof( 所有小孩 ) / sizeof( 所有小孩[ 0 ] ) )
  8.         std::sort( &所有小孩[0], &所有小孩[0] + 所有小孩数 );


  9.         int 本组小孩[ ] = {1, 5, 6, 7, 8, 12, 25 };
  10. #        define 本组小孩数        ( sizeof( 本组小孩 ) / sizeof( 本组小孩[ 0 ] ) )
  11.         std::sort( &本组小孩[0], &本组小孩[0] + 本组小孩数 );


  12.         if( !std::equal( &本组小孩[0], &本组小孩[0] + 本组小孩数, &所有小孩[0] ) )
  13.                 printf( "Error\n" );
  14.         else
  15.                 printf( "MAX: %d\n", 本组小孩[ 本组小孩数 - 1 ] );

  16.         return 0;
  17. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP