切换到宽版
  • 24884阅读
  • 15回复

求助:vijosP1005 死活不会做 拜托各位牛了 [复制链接]

上一主题 下一主题
离线sm-star
 
只看楼主 正序阅读 0 发表于: 2007-08-24
P1005 超长数字串
背景 Background 
  George很喜欢数学,尤其是算数数系列。
描述 Description 
  他最喜欢的是数字的无穷序列,结果是把所有的自然数按升序排列。这个序列开始是: 1234567891011121314... 我们叫序列 S。然后 S[1] = 1, S[2] = 2, ... , S[10] = 1, S[11] = 0, ... , 以此类推。
George 现有一个数字系列 A ,他想知道在S中最早出现的位置。帮助他解决这个难题。
输入格式 Input Format 
  输入文件包含 A - 给出的数字系列。位数不超过 200。没有空格。
输出格式 Output Format 
  输出一个整数。- 最小的 k ,使 A[1] = S[k], A[2] = S[k+1], ... A[len(A)] = S[k + len(A) -1], len(A) 表示 A 的长度。
样例输入 Sample Input 
  101
样例输出 Sample Output 
  10




离线gbbbb

只看该作者 15 发表于: 2015-08-19
打表
离线qq1426235665
只看该作者 14 发表于: 2011-08-06
C++写的,思路应该没问题,但不是高精度的

#include<iostream>
#include<string>
using namespace std;
string int_to_s(long long);
int main()
{
    string S,s;
    long long l_s,l_S;
    bool t=1;
    cin>>s;
    l_s=s.size();
    l_S=S.size();
    for(long long i=1;t;i++)
    {
      S+=int_to_s(i);
      l_S=S.size();
      
      for(long long j=0;j<l_S;j++)
        if(S[j]==s[0])
        {
          long long n=0;
          if(l_S-j<l_s)
            break;
          for(long long k=0;k<l_s;k++)
            if(S[k+j]==s[k])
              n++;
          if(n==l_s)
          {
            cout<<j+1;
            t=0;
            break;
          }
        }
    }
    system("pause");
    return 0;
}
string int_to_s(long long a)
{
  char s1[1000000],s[1000000];
  long long i=0;
  while(a>0)
  {
    s1=a%10+48;
    a/=10;
    i++;
  }
  for(long long j=0;j<=i;j++)
    s[j]=s1[i-j-1];
  return s;
}

离线lsq
只看该作者 13 发表于: 2009-09-26
KMP是什么东东??
离线zcy691888
只看该作者 12 发表于: 2008-04-12
我做的全UN,~~~
离线yonghu86cs
只看该作者 11 发表于: 2008-02-23
...
离线绝世衰神
只看该作者 10 发表于: 2008-02-01
还是不会~
天生我材必有用
老鼠儿子会打洞
离线fish
只看该作者 9 发表于: 2007-11-24
...

怎么解决??
离线sm-star
只看该作者 8 发表于: 2007-11-24
以解决
离线youling
只看该作者 7 发表于: 2007-11-24
我做了半个月用了三种算法才骗过所有数据,不知有没有更周全的算法能顾及所有情况的数据。
快速回复
限100 字节
 
上一个 下一个