省赛2013H 宝盒密码

标签:模拟
问题 H: 宝盒密码
时间限制: 1 Sec 内存限制: 128 MB 提交: 17 解决: 6 我的状态:已解决
命题人:外部导入 算法分类:三级 模拟

上一题下一题状态
题目描述
勇敢的 Sbarrow 船长驾着白珍珠号,环游大半个地球,历经艰险,终于找到了琼斯的宝盒。可惜宝盒异常坚固,怎么都打不开,上面只有四个每隔一分钟变化一次的整数,还有一个用来输入密码的锁。Sbarrow 尝试了很多密码,但都不对。不过一天夜里,他得到了启迪,卡里布索女神托梦给他,告诉他:盒子的密码是不断变化的,如果设某一时间盒子上的四个整数,从左到右分别为l,h,a,b则此时盒子的密码为满足以下三个条件的最小的整数 x:

  1. l <= x 且 x <= h
  2. a mod x = 0
  3. x mod b = 0
    Sbarrow 虽然勇敢,也很聪明,但他可不是一个优秀的算法专家,现在请你来帮他解决这个问题吧。
    输入
    首先是一个整数 t,表示有 t 组测试数据。(t <= 1000)
    每组有四个整数 l, h, a, b ( 1 <= l, h, a, b <= 10^9 )。
    输出

对于每组数据输出一行 “Case #c: x”,c 表示第几组测试数据(从1开始),
x 为结果,若不存在满足这些条件的整数,则结果为 -1。
样例输入

2
5 10 18 3
19 21 18 3

样例输出

Case #1: 6 
Case #2: -1

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int t,l,h,a,b,z;
        scanf("%d",&t);
        for(int i=1;i<=t;i++)
        {
            int flag=0;
            scanf("%d%d%d%d",&l,&h,&a,&b);
            printf("Case #%d: ",i);
            for(int j=a-1;j>=2;j--)
            {
    //            printf("j=%d\n",j);
                if(a%j==0)
                {
                    z=a/j;
                    if(z%b==0&&z>=l&&z<=h)
                    {
                        printf("%d\n",z);
                        flag=1;
                        break;
                    }
                    if(flag==1)
                        break;
                }
            }
            if(flag==0)
                printf("-1\n");
        }
    
        return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值