| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2231 人关注过本帖
标题:求教大神为什么答案错误?
只看楼主 加入收藏
猴开森
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2016-11-27
结帖率:60%
收藏
 问题点数:0 回复次数:7 
求教大神为什么答案错误?
某班学生参加程序设计大赛,最后结果及格有超过P%但不足Q%的人。现在给你P和Q,你要算出该班最少有多少人。(数据弱了一点,所以好通过)。
输入
两个实数P,Q。用空格隔开。每个数最多有两位小数。0.00<=p<q<=99.99
输出
神风堂最少的人数。
样例输入
13    14.1
67.73 67.92
样例输出
15
28

#include<stdio.h>
int main()
{
    float p,q;
    int i;
    scanf("%f%f",&p,&q);
    for(i=1;;i++)
    {
        if((int)(i*q/100)-(int)(i*p/100)==1)
        {
           printf("%d\n",i);
           break;
        }

    }
    return 0;
}
搜索更多相关主题的帖子: include 程序设计 
2017-02-06 15:19
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
把if条件改成这样,
if((int)(i*q/100-0.000001)-(int)(i*p/100+0.000001)>=1)    //注意float类型数据的误差
2017-02-06 17:23
猴开森
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2016-11-27
收藏
得分:0 
回复 2楼 ldsh304
可是还是答案错误。。。我还有别的地方不对吗?
2017-02-06 20:08
daienkai
Rank: 1
等 级:新手上路
帖 子:30
专家分:7
注 册:2017-1-31
收藏
得分:0 
我运行 答案是正确的
2017-02-06 20:15
猴开森
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2016-11-27
收藏
得分:0 
运行答案是正确的,但是OJ上显示答案错误
2017-02-06 20:17
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
i*(q/100.0)
题目数据可能存在整数……这样改改试试~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-07 07:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
我搜索了一些网上的能通过的代码,发现这些代码的结果是错误的,所以我怀疑这道题的标准答案本身就是错的
随便举几个例子
p=7.68, q=7.69时,n=625是不行的,因为48/625=7.68%,不符合题目要求的“超过P%”
p=14.29, q=14.30时,n=1000是不行的,因为143/1000=14.30%,不符合题目要求的“不足Q%”

----------- 贴出我认为正确的代码 -----------
程序代码:
#include <stdio.h>

unsigned foo( double p, double q )
{
    // 还原出真实无误差的输入
    unsigned pp = (int)(p*100+0.5);
    unsigned qq = (int)(q*100+0.5);

    // 避免使用任何浮点算法
    for( unsigned n=1; ; ++n )
    {
        unsigned i = pp*n/10000 + 1;
        if( i*10000 < qq*n )
            return n;
    }
    return 0;
}

int main( void )
{
    double p, q;
    scanf( "%lf%lf", &p, &q );
    printf( "%u\n", foo(p,q) );

    return 0;
}



[此贴子已经被作者于2017-2-7 13:24编辑过]

2017-02-07 10:01
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
if (((int)(i*q / 100) - (int)(i*p / 100) )>= 1)//少了个括号
2017-02-07 11:06
快速回复:求教大神为什么答案错误?
数据加载中...
 
   



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

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