小学生游戏 及程序

小学生游戏
程序文件名: pupil.cpp/pupil.pas/...
  某天,无聊的小杰叫上几个同学玩游戏,其中有比较笨的小凤,比较傻的小雪,可爱的小鑫和自以为是的小练。他们去找聪明的小艺去给他们当裁判。判定谁取得游戏胜利。而这个游戏是:由小艺给出一个数 a ,再给出一个数 b ,经过规定的运算,使得数 a 变换成数 b ,且使用最少的变换次数 n .谁先说对这个 n ,谁就取得胜利。当然,因为都是小学生,所以假定如果n>6 ,就算是没有答案。那么裁判小艺试图通过编程来使自己尽快的获得答案。请你帮帮他吧......
问题描述:
  题目给出数a(a是一个正整数,不超过50位),再给出目标数b(同样是一个正整数,不超过50位),
数的运算有三种:
  1:使当前数加上1985429
  2:使当前数加上2006
  3:使当前数乘2
  需要你求出这个最小的n,如果n>6,输出-1。(此为负一)。
例1:小艺给出数a=1,给出数b=1987437
  那么最快我们经过3次指定运算可以使1变成1987437
  1*2=2;(第3种变换)
  2+1985429=1985431;(第1种变换)
  1985431+2006=1987437;(第2种变换)
例2:小艺给出数a=1,给出数b=128
  那么最快我们经过7次指定运算可以使1变成128
  1*2*2*2*2*2*2*2=128(均采用第3种变换),但是因为n>6,所以按题意输出-1。
输入 (请使用标准输入输出,而不要读写文件)
  输入仅包含两个整数A、B,每行一个数字,0<A<1e+50,0<B<1e+50。 
输出 (请使用标准输入输出,而不要读写文件)
  输出只有一行,即为最少的变换次数 n ,若 n>6 则输出-1。 
样例输入 1
样例输出 1
1
1987437
3
样例输入 2
样例输出 2
1
128
-1

 

 

 

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
 int innum,outnum;
 int total;
 int j=0;
  int k=0;
 int i=0;
 bool flag=false;
 cin>>innum>>outnum;   

     total=innum;
    for( i=0;i<5;i++)   //先+198429,再+2006,最后*2。
  {
      int temp1=total;
      for(j=0;j<900;j++)
   {
         int temp2=temp1;
      for(k=0;k<1000000;k++)
      {
       if(temp2==outnum)
       {
        flag=true;
        cout<<"============1==============="<<endl;
        goto loop;
       }
      if(temp2>outnum) break;
                   temp2*=2;
      }
      if(temp1==outnum)
      {
                   flag=true;
       cout<<"============1==============="<<endl;
       goto loop;
      }
       if(temp1>outnum) break;
       temp1+=2006;   
   }
   if(total==outnum)
   {
    flag=true;
    cout<<"============1==============="<<endl;
    goto loop;
   }
     if(total>outnum) break;
        total+=1985429;
  }1/
    total=innum;
  for( i=0;i<900;i++)//先+2006,再+198429,最后*2。
  {
      int temp1=total;
      for(j=0;j<5;j++)
   {
         int temp2=temp1;
      for(k=0;k<1000000;k++)
      {
       if(temp2==outnum)
       {
        flag=true;
        cout<<"============2==============="<<endl;
        goto loop;
       }
      if(temp2>outnum) break;
                   temp2*=2;
      }
      if(temp1==outnum)
      {
                   flag=true;
       cout<<"============2==============="<<endl;
       goto loop;
      }
       if(temp1>outnum) break;
       temp1+=1985429;   
   }
   if(total==outnum)
   {
    flag=true;
    cout<<"============2==============="<<endl;
    goto loop;
   }
     if(total>outnum) break;
        total+=2006;
  }2///
  total=innum;
   for(i=0;i<900;i++)//先+2006,再*2,最后+198429。
  {
      int temp1=total;
      for(j=0;j<1000000;j++)
   {
         int temp2=temp1;
      for(k=0;k<5;k++)
      {
       if(temp2==outnum)
       {
        flag=true;
        cout<<"============3==============="<<endl;
        goto loop;
       }
      if(temp2>outnum) break;
                   temp2+=1985429;
      }
      if(temp1==outnum)
      {
                   flag=true;
       cout<<"============3==============="<<endl;
       goto loop;
      }
       if(temp1>outnum) break;
       temp1*=2;   
   }
   if(total==outnum)
   {
    flag=true;
    cout<<"============3==============="<<endl;
    goto loop;
   }
     if(total>outnum) break;
        total+=2006;
  }/3///
  total=innum; 
  for(i=0;i<5;i++)//先+198429,再*2,最后+2006。
  {
      int temp1=total;
      for(j=0;j<100000;j++)
   {
         int temp2=temp1;
      for(k=0;k<900;k++)
      {
       if(temp2==outnum)
       {
        flag=true;
        cout<<"============4==============="<<endl;
        goto loop;
       }
      if(temp2>outnum) break;
                   temp2+=2006;
      }
      if(temp1==outnum)
      {
                   flag=true;
       cout<<"============4==============="<<endl;
       goto loop;
      }
       if(temp1>outnum) break;
       temp1*=2;   
   }
   if(total==outnum)
   {
    flag=true;
    cout<<"============4==============="<<endl;
    goto loop;
   }
     if(total>outnum) break;
        total+=1985429;
  }//4//
  total=innum;
  for(i=0;i<10000;i++)//先*2,再+198429,最后+2006。
  {
      int temp1=total;
      for(j=0;j<5;j++)
   {
         int temp2=temp1;
      for(k=0;k<900;k++)
      {
       if(temp2==outnum)
       {
        flag=true;
        cout<<"============5==========1====="<<endl;
        goto loop;
       }
      if(temp2>outnum) break;
                   temp2+=2006;
      }
      if(temp1==outnum)
      {
                   flag=true;
       cout<<"============5=========2======"<<endl;
       goto loop;
      }
       if(temp1>outnum) break;
       temp1+=1985429;//a   
   }
   if(total==outnum)
   {
    flag=true;
    cout<<"============5=========3======"<<endl;
    goto loop;
   }
     if(total>outnum) break;
        total*=2;   //c
  }//5/
  total=innum;
  for(i=0;i<100000;i++)//先*2,再+198429,最后+2006。
  {
      int temp1=total;
      for(j=0;j<5;j++)
   {
         int temp2=temp1;
      for(k=0;k<900;k++)
      {
       if(temp2==outnum)
       {
        flag=true;
        cout<<"============6==============="<<endl;
        goto loop;
       }
      if(temp2>outnum) break;
                   temp2+=1985429;
      }
      if(temp1==outnum)
      {
                   flag=true;
       cout<<"============6==============="<<endl;
       goto loop;
      }
       if(temp1>outnum) break;
       temp1+=2006;//a   
   }
   if(total==outnum)
   {
    flag=true;
    cout<<"============6==============="<<endl;
    goto loop;
   }
     if(total>outnum) break;
        total*=2;   //c
  }//6/
    loop:
 int temp=i+j+k;
 if(flag&&temp<570)
 {
  FILE *fp;
  fp=fopen("1.txt","w");
  fprintf(fp,"%d %d/n",innum,outnum);
  fprintf(fp,"%d %d %d",i,j,k);
  fclose(fp);
  cout<<"计算步骤=   "<<i+j+k<<endl;
    cout<<"  successed"<<endl;
 }
 else
  cout<<"failed -1"<<endl;
 getchar();
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值