关闭

AB计算器及程序

975人阅读 评论(0) 收藏 举报
AB计算器
程序文件名: ab.cpp/ab.pas/...
  南开ACM协会的一位元老设计了一种特殊的计算器。这个计算器只有四个键(A,B,+,-)
  计算器显示的数值开始为c
  按一下"+"然后按一下"A",计算器显示的数值增加 a
  按一下"-"然后按一下"A",计算器显示的数值减少 a
  按一下"+"然后按一下"B",计算器显示的数值增加 b
  按一下"-"然后按一下"B",计算器显示的数值减少 b
  请问至少需要按多少下A键才能让计算器显示的值显示为0
输入(请使用标准输入输出,而不要读写文件)
  输入包含三个正整数 a b c ,以空格隔开,满足 0<a<2^95 0<b<2^95 0<c<2^95 a b 分别表示A键和B键的对应数值, c 表示计算器显示的初始值。(2^95 表示295次幂
输出(请使用标准输入输出,而不要读写文件)
  输出只有一个数,即为 A 键被按的次数的最小值(我们确保输入的情况都有对应的答案
样例输入1
样例输出1
7 12 8
4
样例输入2
样例输出2
10549830 6549835 5
140969

 

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
//#include <math.h>
#include "math.h"

 

void main()
{
    double a,b,c;
 int j=0;
 int di=0,dj;
 int i=0;
 bool accc=false;
 bool acc=false;
    double temp;
 bool flag=false;
 int times=1000000;
 cout<<"输入三个数字a b c:"<<endl;
 cin>>a>>b>>c;
 for( i=0;i<100000&&!flag;i++) ///+ +
 {
  for( j=0;j<100000&&!flag;j++)
  {
   if((i*a+j*b)==c)
    { times=i;  di=i;  dj=j; flag=true; }
   if((i*a+j*b)>c) break;
  }
  if(i*a>c)
   break;
 }
 flag=false;
 cout<<"2============================="<<endl;
 for(i=0;i<times&&!flag;i++) //+ -
 {
        temp=i*a;
  acc=false;
  accc=false;
  for( j=0;j>-300000&&!flag;j--)
  {
   if((temp+j*b)>c&&!acc)//jiasu acc
   {
    j=j-3000;
    continue;
   }
   else if(!acc)
   {
    acc=true;
    j=j+3000;
   }
         
   if((temp+j*b)>c&&!accc)//加速accc
   {
    j=j-600;
    continue;
   }
   else if(!accc)
   {
    accc=true;
    j=j+600;
   }


   if((temp+j*b)==c)
    if(i<times)
    { times=i; di=i;  dj=j;  if(!flag) cout<<"成功计算出一个了!"<<endl;flag=true;}
   if((temp+j*b)<c)
            break;
  }
      if((times/100)!=0)
     if((i)%(times/100)==99)
    cout<<1+(i)*100/times<<"%"<<endl;
 }
 flag=false;
 cout<<"3============================="<<times<<endl;
 for(i=0;i>-times&&!flag;i--)//- +
 {
  acc=false;
  accc=false;
  temp=i*a;
  for( j=0;j<1000000&&!flag;j++)
  {
           if((temp+j*b)<c&&!acc)//加速acc
   {
    j=j+20000;
    continue;
   }
   else if(!acc)
   {
    acc=true;
    j=j-20000;
   }
           
   if((temp+j*b)<c&&!accc)//加速accc
   {
    j=j+2000;
    continue;
   }
   else if(!accc)
   {
    accc=true;
    j=j-2000;
   }


   if((temp+j*b)==c)
    if(abs(i)<times)
    {  times =abs(i); di=i;  dj=j; if(!flag) cout<<"成功计算出一个了!"<<endl;flag=true;}
    if((temp+j*b)>c)
      break;
  }
  if((times/100)!=0)
          if((-i)%(times/100)==99)
        cout<<(-i)*100/times<<"%"<<endl;
 }
 cout<<"进入第四种算法"<<endl;
 for(i=0;i>-times&&!flag;i--)//- -
 {
  temp=i*a;
  acc=false;
  for( j=0;j>-times&&!flag;j--)
  {
   if((temp+j*b)>c&&!acc)
   {
    j=j-3000;
    continue;
   }
   else if(!acc)
   {
    acc=true;
    j=j+3000;
   }

   if((temp+j*b)==c)
    if((abs(i))<times)
    { times=abs(i); di=i;  dj=j;  flag=true;}
   if((temp+j*b)<c)
    break;
  }
   if((temp+j*b)<c)
    break;
   if((times/100)!=0)
        if((-i)%(times/100)==99)
          cout<<(-i)*100/times+1<<"%"<<endl;
 }
 
    if(di)
   cout<<"i= "<<di<<" j= "<<dj<<endl;
    getchar();
}

             

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42486次
    • 积分:573
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:35篇
    • 译文:0篇
    • 评论:16条
    文章分类
    最新评论
    编程