小学生游戏 及程序

转载 2006年06月23日 15:22:00
小学生游戏
程序文件名: 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();
}

 

 

相关文章推荐

求一个能够 自动生成小学生数学练习题目 的Java程序。

小学生数学练习题目自动生成系统 设计一个程序,能够根据用户的选择生成“10以内加法”、“10以内减法”、“20以内加法”、“20以内减法”、“100以内加法”、“100以内减法”、“100以内乘法”...

人人都能成为黑客:不是游戏打不过小学生了,而是编码也不如小学生咯 !

http://bbs.chinaunix.net/thread-4135053-1-1.html

小学生加减法运算程序

第十周 项目三-小学生数学考试系统

Copyright (c) 2016, 烟台大学计算机与控制学院 All ringts reserved. 文件名称:项目三- 作 者:王兴振完成日期:2016年11月14日版 本 号:未知题目描述:

C 小学生算法联系程序

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)