关于算法的问题???谢谢帮助!!UP也可以来!!!!例如:现在有一个数据库,里面有N行数据,都是7位数的,
        
        1234567
        7654123
        4456123
        。
        。
        1452354       计算后我想得到结果是: 第一位里0出现了几次,1出现了几次,9出现了几次?
                            第二位里。
                             。
                            第七位。。    可我刚学编程,作不出来,谁有代码给我看看或给些思路???????????

解决方案 »

  1.   

    先是设立一个三维数组有N行7列列里面再是10个元素
    N行表示N行数据,7列代表7个位数,里面的10个元素,代表0-9的出现次数for i:=1 to n do   读入N行
      for j:=1 to 7 do   7位数字
      n:=那个位的数字     
      inc(number[i,j,n])
      

  2.   

    用2维数组就可做到,我给你一个例子(请多加点分给我,我在Win2000下已调试过)procedure TForm1.Button1Click(Sender: TObject);
    var
      Nums: array[1..7, 0..9] of Integer; //计算第几位数字(0..9)出现的次数
      Strs: array[1..7] of String;   //用于存储一行的数据 1234567
      j, k: Integer;
      SS: String;
    begin
      for k := Low(Nums) to High(Nums) do
        for j := Low(Nums[k]) to High((Nums[k])) do
          Nums[k, j] := 0;  SDS1.Open;
      SDS1.First;
      while not SDS1.Eof do
      begin         //循环
        SS := SDS1.FieldByName('Test').AsString;
        for k := Low(Strs) to High(Strs) do
        begin
          Strs[k] := Copy(Trim(SS), k, 1);
          for j := Low(Nums[k]) to High(Nums[k]) do
          begin
            if StrToInt(Strs[k]) = j then
              Nums[k,j] := Nums[k,j] + 1;
          end;
        end;
        SDS1.Next;
      end;
      //初始化StringGrid1
      StringGrid1.RowCount := 11;
      StringGrid1.ColCount := 8;
      StringGrid1.Cells[0,0] := '计算结果';
      for j := Low(Nums[1]) to High(Nums[1]) do
        StringGrid1.Cells[0, j + 1] := Format('%d:出现次数', [j]);
      for j := Low(Nums) to High(Nums) do
        StringGrid1.Cells[j, 0] := Format('第%d位', [j]);
      //计算次数显示在StringGrid1 
      for k := Low(Nums) to High(Nums) do
        for j := Low(Nums[k]) to High((Nums[k])) do
          StringGrid1.Cells[k, j + 1] := IntToStr(Nums[k, j]);
          
    end;
      

  3.   

    用SQL语句实现吧
    for i:=1 to 7 do
    begin
      AdoQuery1.close;
      AdoQuery1.Sql.Clear;
      adoquery.sql.add('select count(mynum) as mytime from mytable where mynum like '''+inttostr(i)+'%''')
      adoquery.open
      str:=str+' '+inttostr(i)+'在第一位出现了'+adoquery.fieldbyname('mytime').asstring;
    end;
      

  4.   

    好象只算了第一位出现的次数,看来应该动态形成like的字符串。
    TO  kaiyun97()该贴是没有分的,呵呵。
      

  5.   

    To: 雨中独行,你的mytable结构不明,请说明详细一点,让别人好理解。
    还有,你的方法是可能很好,但别人的也不一定是错。
    凭什么说我没有分,给不给分是楼主的事,你好象没这个权限吧。
    其实给不给分是不重要的,重要的是大家能交流探讨解决问题,长点见识,大家说是不是。