数字河

来源:互联网 发布:杭州淘宝运营学徒招聘 编辑:程序博客网 时间:2024/04/28 20:59

描述:

数字河中的一个数n 的后继数是n 加上其每位数字的和。例如,12345的后继数是12360,因为12345+1+2+3+4+5=12360。如果数字河的第一个数为k,我们就称此数字河为river k。例如,river 480 代表序列{480, 492, 507, 519, ...},river 483 代表序列{483, 498, 519, ...}。
当两个数字河有相同的元素时,我们称这两个数字河在此元素处相遇。例如,river 480 和river 483 在元素519处相遇。所有数字河都会和river 1, river 3 或river 9 相遇。编程计算给定的数字河最先与以上三条河流中的哪一条相遇,在何元素处相遇?

输入:

输入文件包括多组测试用例,每个测试用例占一行,以“0”标志文件结束,该行无需处理。
每行给定一个整数 n ,(1<=n<=16384) ,即river n。

输出:

对于每个测试用例输出两行,第一行为测试用例号,第二行输出“first meets river x at y”。其中,y表示river n 最先遇到的river x中的最小元素值(x = 1,3,9)。

输入样例:

117520

输出样例:

Case #1first meets river 9 at 117Case #2first meets river 1 at 107

#include<iostream>
using namespace std;
int main()
{
 int n,n1,a,a1,b,b1,c,c1,i,e,x,sum;
 int A[100000],B[100000],C[100000],N[100000],Y[100000];
 for(e=0;;e++)
 {
  cin>>Y[e];
  if(Y[e]==0)
  {
   break;
  }
 }
 for(x=0;x<e;x++)
 {
  a=0;b=0;c=0;A[0]=1;B[0]=3;C[0]=9;
  N[0]=Y[x];n=0;
  for(;;)
  {
   for(;;)
   {
    if(A[a]<N[n])
    {
     sum=0;
     A[a+1]=A[a];
     for(;A[a]>0;)
     {
      a1=A[a]%10;
      sum=sum+a1;
      A[a]=A[a]/10;
     }
     A[a+1]=A[a+1]+sum;
     a=a+1;
    }
    else
    {
     break;
    }
   }
   for(;;)
   {
    if(B[b]<N[n])
    {
     sum=0;
     B[b+1]=B[b];
     for(;B[b]>0;)
     {
      b1=B[b]%10;
      sum=sum+b1;
      B[b]=B[b]/10;
     }
     B[b+1]=B[b+1]+sum;
     b=b+1;
    }
    else
    {
     break;
    }
   }
   for(;;)
   {
    if(C[c]<N[n])
    {
     sum=0;
     C[c+1]=C[c];
     for(;C[c]>0;)
     {
      c1=C[c]%10;
      sum=sum+c1;
      C[c]=C[c]/10;
     }
     C[c+1]=C[c+1]+sum;
     c=c+1;
    }
    else
    {
     break;
    }
   }
   if(A[a]==N[n])
   {
    cout<<"Case #"<<x+1<<endl;
    cout<<"first meets river 1 at "<<N[n]<<endl;
    break;
   }
   else if(B[b]==N[n])
   {
    cout<<"Case #"<<x+1<<endl;
    cout<<"first meets river 3 at "<<N[n]<<endl;
    break;
   }
   else if(C[c]==N[n])
   {
    cout<<"Case #"<<x+1<<endl;
    cout<<"first meets river 9 at "<<N[n]<<endl;
    break;
   }
   else
   {
    sum=0;
    N[n+1]=N[n];
    for(;N[n]>0;)
    {
     n1=N[n]%10;
     sum=sum+n1;
     N[n]=N[n]/10;
    }
    N[n+1]=N[n+1]+sum;
    n=n+1;
   }
  }
 }
}

原创粉丝点击