ZCMU-1341 找规律

本文解析了一道ACM编程题目,目标是最少操作次数使数A不大于B。通过寻找A%X的最大值规律,实现最优操作。代码使用C++编写,展示了完整的解题思路。

http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1341

题意:

给你一个数A,B,一次操作可以使A变成A-A%X(1<=X<A),要求最少的操作次数使A<=B.

找规律我们要求A%X的值最大。

A%2==0时  A%X的最大值为A/2-1;否则为A/2;

AC代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
    int t,cnt,ans=1;
    long long a,b;
    scanf("%d",&t);
    while(t--){
        cnt=0;
        scanf("%lld%lld",&a,&b);
        while(a>b){
            if(a%2==0) a=a-(a/2-1);
            else a=a-a/2;
            cnt++;
        }
        printf("Case %d: %d\n",ans++,cnt);
    }
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值