AB计算器及程序

原创 2006年06月23日 15:27:00
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();
}

             

 

相关文章推荐

AB SLC500 程序

  • 2015年08月13日 14:46
  • 303KB
  • 下载

焦化程序AB

  • 2014年09月10日 17:05
  • 3.15MB
  • 下载

程序压力测试、性能测试AB、Webbench、Tsung

负载生成器是一些生成用于测试的流量的程序。它们可以向你展示服务器在高负载的情况下的性能,以及让你能够找出服务器可能存在的问题。为了得到更加客观和准确的数值,应该从远程访问、局域网访问和本地等多个方面进...

linux0.11学习笔记-技术铺垫-简单AB任务切换程序(5)-实现三个任务切换

转自:http://www.cnblogs.com/linucos/archive/2012/04/14/2447054.html 上篇我们实现了时钟中断的响应,以及输出简单的字符功能。本篇我们实现...

linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法

转自:http://www.cnblogs.com/linucos/archive/2012/04/01/2428862.html   写底层代码,我们需要特别的手段去调试,去debug.本文针对...

USB接口IC读写器oem软件_AB密码完整解决方案/读写卡测试程序及源代码/网页例程

    代码如下                    USB IC 卡读卡器控件调用例程 V1.0 -- 广州荣士电子    控制字定义,控制字指定,控制字的含义请查看本公司网站提供的动态库说明Co...

USB接口IC读写器oem软件_AB密码完整解决方案/读写卡测试程序及源代码/VB.NET2003源代码

界面图     详细代码  Public Class Form1    Inherits System.Windows.Forms.Form#Region " Windows 窗体设计器生成的代码 "...

H2 AB盘破解补丁安装程序

  • 2015年02月12日 15:58
  • 2.03MB
  • 下载

ab程序20版本转为19版本的方法

  • 2014年11月21日 09:25
  • 741KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AB计算器及程序
举报原因:
原因补充:

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