标题:买小猫小狗,OJ上显示25%的错误
只看楼主
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
回复 9楼 lin5161678
您的解释我明白了,就是扩大了变量的取值范围,但我想这道题用int 类型应该就可以了吧,都在范围内呢,不过我还是按照您的提示把程序修改了下,刚在OJ上运行,还是没过,停留在25%的答案那。  想不到哪里没考虑到...
代码如下
程序代码:
#include<stdio.h>
int main()
{
    int a,b,i,j,count=0;
    long int x; //i 小猫 j小狗 
    scanf("%ld%d%d",&x,&a,&b);
    for(i=1;i<=100;i++){
        for(j=1;j<=100;j++){
            
            if(1L * i * a + 1L * b * j==x)
                count++;
        }
    }
    printf("%d\n",count);
    return 0;
}

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-04-13 17:46
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:1 
回复 11楼 Redeyes
贴一下 你做题的网址
我也试试看

https://zh.
2016-04-13 17:58
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
得分:1 
我重复一下你的问题,是 给你x元,买狗和猫,每只至少一只,如果可以刚好用完钱,就输出可以实施方案的总数,不可以就输出0?

好好学习,天天向上!
2016-04-13 18:03
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
得分:1 
以下是引用未来大仙在2016-4-13 18:03:22的发言:

我重复一下你的问题,是 给你x元,买狗和猫,每只至少一只,如果可以刚好用完钱,就输出可以实施方案的总数,不可以就输出0?



如果是这样,给你个思路吧,假设拥有的钱,可以刚好花完,那么方案就会这样,买一个狗,剩下的全买猫,买2只狗,剩下的全买猫,买3只狗,剩下的全买猫,一直这样下去,就把方案全都列出来了。至于可不可以买完,就要靠判断了。
有什么问题再问吧。

好好学习,天天向上!
2016-04-13 19:40
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
回复 14楼 未来大仙
那意思就是可以用一个for循环先枚举狗,然后用剩余的钱去除以猫的价格,如果能除尽,就输出,不能就继续枚举,对吧

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-04-14 22:10
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
回复 12楼 lin5161678
好的  http://oj.  (一个小oj)

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-04-14 22:11
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
得分:1 
回复 15楼 Redeyes
对的,如果可以除尽,方案+1,不可以就跳过..

好好学习,天天向上!
2016-04-14 23:01
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:2 
程序代码:
#include <stdio.h>

int main()
{
    int x, a, b;
    scanf("%d%d%d", &x, &a, &b);
    int count = 0;
    for(int i = (x+b-1)/b; i>0; --i)
    {
        int tmp = x - i*b;
        if(tmp % a == 0 && tmp >= a)//注意剩下的钱必须至少能买1只猫 
            ++count;
    }
    
    printf("%d\n", count);
    return 0;
}

https://zh.
2016-04-15 00:44
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
得分:0 
回复 18楼 lin5161678
谢谢!我明白了,如果用两个for循环,有可能造成count的数值超出我所设定的int范围,而用一个for循环枚举可以完美的解决这个问题,这是我的理解。

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-04-15 11:04
北国123456
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2016-10-6
得分:0 
回复 楼主 Redeyes
我也做了这个题,我是这样写的
#include<stdio.h>
int main()
{
    int i,j,x,a,b,count=0,k;
    scanf("%d%d%d",&x,&a,&b);
    for(i=1;i<=(x-b)/a;i++)
      {
         j=(x-i*a)/b;
         if(i*a+j*b==x)
            count++;
      }
        printf("%d\n",count);
        return 0;
}
2017-01-02 19:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463531-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028703 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved