| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:水题,各种WA啊
只看楼主 加入收藏
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:6 
水题,各种WA啊
Fate Stay Night
时间限制(普通/Java) : 5000 MS/ 5000 MS          运行内存限制 : 65536 KByte
总提交 : 81            测试通过 : 24
描述
YY最近迷上了《Fate Stay Night》。在看这部动漫之前,YY就知道最后是亚瑟王Saber单挑英雄王吉尔伽美什,但是却不知道结果,这叫YY如何是好,如果要知道结果可是要补24集啊!喜欢幻想的YY开始在脑海中构想出各种不同情况的战场(由于YY是RPG的忠实fans,所以他构想的战斗都是回合制的,即Saber攻击一次,吉尔伽美什攻击一次),但是不擅长计算的YY算不出结果究竟如何。现在,无助的YY想求助于聪明的你,相信你不会让他失望的。
输入
多个CASE。第一行输入一个正数T(0<=T<=1),‘0’表示Saber先手,‘1’表示吉尔伽美什先手。第二行输入三个正数L1、A1、D1,分别表示Saber的生命值、攻击力、防御力。第三行输入三个正数L2、A2、D2,分别表示吉尔伽美什的生命值、攻击力、防御力。以上数据均小于2^31。
输出
对于每个CASE,如果Saber赢了,输出“Saber saiko!”,否则输出“Bad End”。
样例输入
0
20 10 0
20 10 0
1
20 10 0
20 10 0
样例输出
Saber saiko!
Bad End
提示
伤害值=攻击力-防御力,并且保证攻击力一定大于防御力。

我的代码:
程序代码:
#include<cstdio>

int main()
{
    int t,L1,A1,D1,L2,A2,D2;
    while(~scanf("%d%d%d%d%",&t,&L1,&A1,&D1)){
        scanf("%d%d%d",&L2,&A2,&D2);
        while(L1>0&&L2>0){
            if(t==0){
                L2-=(A1-D2);
                if(L2>0)    t=1;
            }                
            if(t==1){
                L1-=(A2-D1);
                if(L1>0)    t=0;
            }    
        }    
        if(L1<=0)    printf("Bad End\n");
        else printf("Saber saiko!\n");        
    }
    return 0;
}


太奇葩了,都说是三个正数,测试示例中防御力居然可以是 0!

[ 本帖最后由 cb_1212 于 2012-3-1 01:31 编辑 ]
搜索更多相关主题的帖子: 如何 Java 亚瑟王 测试 回合制 
2012-03-01 01:19
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
没有防御力也很合理么,为负值也不是不可以,中毒了。试试这段代码
程序代码:
#include<stdio.h>
int main()
{
    int t, L1, a1, d1, L2, a2, d2, r1, r2;
    while(scanf("%d%d%d%d%d%d%d", &t, &L1, &a1, &d1, &L2, &a2, &d2) != EOF)
    {
        r1 = (L1 + a2 - d1 - 1) / (a2 - d1);
        r2 = (L2 + a1 - d2 - 1) / (a1 - d2);
        puts(r1 >= t + r2 ? "Saber saiko!" : "Bad End");
    }
    return 0;
}

重剑无锋,大巧不工
2012-03-01 01:45
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
求杨大哥解释下哦

                                         
===========深入<----------------->浅出============
2012-03-01 09:10
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你一下我一下的打很有规律。
算算其中一个人要用多少下打倒另一个。然后看看谁打的少谁就能赢。一样的时候还得看看是谁先打的。
2012-03-01 10:52
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
呵呵,其实就是楼上所说的。我代码中的r1、r2分别表示两个人被砍多少次会挂掉。
在西南民族大学的OJ里找到了这道题,但提交上面的代码也是WA,分析原因应该是计算溢出了。但是将数据类型更改为符号整型及64位整型依旧WA。
最后分解上面的计算步骤,AC,我表示

程序代码:
#include<stdio.h>
int main()
{
    int t, L1, a1, d1, L2, a2, d2, r1, r2;
    while(scanf("%d%d%d%d%d%d%d", &t, &L1, &a1, &d1, &L2, &a2, &d2) != EOF)
    {
        r1 = L1 / (a2 - d1);
        if(L1 % (a2 - d1)) r1++;
        r2 = L2 / (a1 - d2);
        if(L2 % (a2 - d1)) r2++;
        r1 -= r2;
        r1 -= t;
        puts(r1 >= 0 ? "Saber saiko!" : "Bad End");
    }
    return 0;
}

重剑无锋,大巧不工
2012-03-01 11:44
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 4楼 pangding
谢谢 pangding大侠   早晨刚起来有点懵。。。。

                                         
===========深入<----------------->浅出============
2012-03-01 12:29
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 5楼 beyondyf
杨大哥的代码风格。
2012-03-08 20:32
快速回复:水题,各种WA啊
数据加载中...
 
   



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

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