数字河

来源:互联网 发布:火灾数据 编辑:程序博客网 时间:2024/06/11 06:44
#include<iostream>
using namespace std;
int main()
{ int i,I,j,m,sum,j1,j2,j3,L=0,p,q,a[10000],b[100],X[10000],Y[10000],Z[10000];
  int x1=1,y1=3,z1=9,x,y,z;
  for(x=0;x<10000;x++)
   { p=x1;sum=0;
      while(x1>0)
    {
     m=x1%10;
     x1=x1/10;
     sum=sum+m;
    }
      x1=p;
      X[x]=x1;
     x1=x1+sum;
   }
  for(y=0;y<10000;y++)
   { p=y1;sum=0;
      while(y1>0)
    {
     m=y1%10;
     y1=y1/10;
     sum=sum+m;
    }
      y1=p;
    Y[y]=y1;
     y1=y1+sum;
  }
    for(z=0;z<10000;z++)
   { p=z1;sum=0;
      while(z1>0)
    {
     m=z1%10;
     z1=z1/10;
     sum=sum+m;
    }
      z1=p;
      Z[z]=z1;
     z1=z1+sum; //固定的东西就不放在循环体中,避免错误;
  }
   for(i=0;i<100;i++)
   {
    cin>>b[i];
     if(b[i]==0)
    {break;}
  }             //使所有一起输入,然后一起输出
    for(I=0;I<i;I++)
  {   L++;
     p=b[I];   
    for(j=0;j<10000;j++)
   {q=p;sum=0; //还原n与sum ,即变动的元都要还原
      while(p>0)      
    {
     m=p%10;
     p=p/10;
     sum=sum+m;
    }
      p=q;
      a[j]=p;//先赋值再增
      p=p+sum;
  }
     j=0;j1=0;j2=0;j3=0;x=0;y=0;z=0;  // 恢复被改变的元的值;
 while(j<10000&&x<10000&&y<10000&&z<10000)
  { 
        if(a[j1]==X[x])
       {cout<<"Case #"<<L<<endl;
 cout<<"first meets river 1 at "<<a[j1]<<endl;break;}
        if(a[j2]==Y[y])
        {cout<<"Case #"<<L<<endl;
 cout<<"first meets river 3 at "<<a[j2]<<endl;break;}
        if(a[j3]==Z[z])
         {cout<<"Case #"<<L<<endl;
 cout<<"first meets river 9 at "<<a[j3]<<endl;break;}//河流交汇点的找法
   if(a[j1]>X[x])
   {x++;}
   if(a[j1]<X[x])
   {j1++;}
    if(a[j2]>Y[y])
   {y++;}
   if(a[j2]<Y[y])
   {j2++;}
    if(a[j3]>Z[z])
   {z++;}
   if(a[j3]<Z[z])
   {j3++;}               //必须同一个while,三个同时变化,同时比较,j1,j2,j3 实现
 }
 }
 return 0;
}

原创粉丝点击