200121510037692,0 
200220710513343,1 
200220710513343,1 
200220710513343,1 
200220710513343,1 
200220710513344,1 
200220710513344,1 
200220710513344,2 
200223210325997,2 
200223210463443,2 
20032011034322377,2 
200320510211160,2 
200320510371118,2 
200320510375232,2 
200320510475891,3 
200320510499806,3 
200320510507023,3 
200320510513821,3 
200320532000313,3 
2003212101030030,2 
2003212101030310,3 
20032121010313880,2 
2003212101041020,4 
2003212101132790,4 
2003212101154600,4 
200321232009602,4 
200321410025412,4 
200321410028958,4 
200321410029462,4 
200321410047129,4 
200321510084672,4 
200321510211516,4 
200321510213759,4 
200322410501075,4 
200322410501077,4 
200322410501077,4这是一批号码是一个CSV文件,有30万行这样的记录,我现在要做这样一个统计:
一、第一列中,尾数为000-999,各有多少个号码?(包括重复)
二、第一列中,尾数为000-999,各有多少个号码?(不包括重复)

解决方案 »

  1.   

    如果不追求效率,这类题目应该是很简单的。包括重复的:
    a初始化一个数组作计数器 [0,999]个元素为0
    b.取一行
    c.取字串尾三位,转成整数i,相应数组元素a[i]加1
    d.如果未结束则转 b不包括重复的:(前提是已经排序)
    a.初始化一个数组作计数器 a[0,999]个元素为0,和一个临时变量T='';
    b.取一行,如果这行的内容等于T,转b  // 跳过重复行
    c.把当前行内容存入T
    d.取字串尾三位,转成整数i,相应数组元素a[i]加1
    e.如果未结束则转 b
      

  2.   

    var
      ooo,999:float;
    begin
       读入“,”以前的串;
       if pos('000')=串长-3 then inc(ooo)
         else pos('999')=串长-3 then inc(999);
    end;
      我是新手,不知道这样能不能解决问题,献丑了。
      

  3.   

    不重复的:
      select count(*) from XX where LEFT(你的串,3)='999'
    重复的:
      select distinct count(*) from XX  where  LEFT(你的串,3)='999'...............
    好久没写SQL了.可能有的拼错了,但思路是这样
      

  4.   

    第一种方法就用 pazee(耙子)(灵感点亮生活)的,再就是倒入数据库用SQL语句如GoldShield(金盾☆正直人)的方法。