小学生游戏 及程序

转载 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();
}

 

 

C++ 小学生加减法测验程序源代码

class Student //student.h { private: int total; public: void output(); ...

程序设计实训一 小学生考试系统

1. 题目描述 做一个小学生考试系统,功能如下:   (1) 利用随机函数出10道加法题; (2) 小学生用户答题,给出每道题的答案; (3) 对小学生的答题进行评判 (4) 计算小学生的答题正确率 ...
  • wylno1
  • wylno1
  • 2016年12月31日 10:14
  • 228

小学生加减法运算程序

  • 2013年06月01日 19:57
  • 2KB
  • 下载

程序设计实训报告--小学生考试系统

题目描述 做一个小学生考试系统,功能如下: 1、  利用随机函数出十道加法题; 2、  小学生用户答题,给出每道题的答案; 3、  对小学生的答题做出评判; 4、  计算小学...

程序设计实训项目一 小学生考试系统

题目描述 小学生考试系统 做一个小学生考试系统,功能如下: (1)利用随机函数出10道加法题; (2)小学生用户答题,给出每道题的答案; (3)对小学生的答题进行评判; (4)计算...
  • mcp3128
  • mcp3128
  • 2017年01月04日 15:25
  • 223
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小学生游戏 及程序
举报原因:
原因补充:

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