数字河

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

数字河中的一个数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)。

输入样例:


117 52 0

#include using namespace std; int main() {      int a[1000],b[1000],c[1000],num[50];//定义数组储存river 1,river 3,river 9,和输入测试的数字     a[0]=1;b[0]=3,c[0]=9;     int i,j,k;  int sum=0;  int flag;  for(i=0;i<50;i++)//输入测试数字  {   cin>>num[i];   if(num[i]==0)   {    break;   }   sum+=1;  }  for(i=1;i<1000;i++)  {       int temp;     //计算river 1     temp=a[i-1];     a[i]=a[i-1];   while(temp/10!=0)   {     a[i]=a[i]+temp%10;     temp=temp/10;    }   a[i]+=temp;     temp=b[i-1];     b[i]=b[i-1];      //计算river 3   while(temp/10!=0)   {     b[i]=b[i]+temp%10;     temp=temp/10;    }   b[i]+=temp;     temp=c[i-1];     c[i]=c[i-1];    //计算river 9   while(temp/10!=0)   {     c[i]=c[i]+temp%10;     temp=temp/10;    }   c[i]+=temp;     }   for(i=0;i

输出样例:


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

你可能感兴趣的:(acm,ACM,Tag)