AB计算器及程序

左丘曦
2023-12-01
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 表示 2 95 次幂
输出 (请使用标准输入输出,而不要读写文件)
  输出只有一个数,即为 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();
}

             

 

 类似资料: