| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 666 人关注过本帖, 1 人收藏
标题:示例正确,提交不成功,怎么回事???
只看楼主 加入收藏
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
收藏(1)
已结贴  问题点数:20 回复次数:6 
示例正确,提交不成功,怎么回事???
程序代码:
#include
char a[9][9];
int panduan(int i,int j)
{
    int x,y,three,qq;
    three=qq=0;
    for(x=i-1;x<=i+1;x++)
    {
        if(x<0) continue;
        for(y=j-1;y<=j+1;y++)
        {
            if(j<0) continue;
            if(a[x][y]=='3')
                three++;
            else if(a[x][y]=='Q')
                qq++;
        }
    }
    if(three>qq)
        return 1;
    else
        return 0;
}
int main()
{   
    int i,j,three,qq,z;
    scanf("%d",&z);
    while(z--)
    {
        three=qq=0;
        for(i=0;i<8;i++)
            scanf("%s",a[i]);
        for(i=0;i<8;i++)
            for(j=0;j<8;j++)
                if(panduan(i,j)==1)
                    a[i][j]='3';
                else
                    a[i][j]='Q';
        for(i=0;i<8;i++)
            for(j=0;j<8;j++)
                if(a[i][j]=='3')
                    three++;
                else
                    qq++;
        if(three>qq)
            printf("3\n");
        else if(three<QQ)
            printf("Q\n");
        else
            printf("D\n");
    }
    return 0;
}

               
如果你每天挂 QQ,并且也使用 360 安全卫士,那就一定知道不久前腾讯做的艰难决定。QQ 和 360 的大战只是耍了几天嘴皮子,就在“有关部门”的干预下平息了。干打雷不下雨,咱这种闲人岂能过瘾。

请你来实现一个程序,看看 360 与 QQ PK 到底结果如何。

比赛的场地是一个 8x8 的方阵,QQ 和 360 分别派各自的员工占据其中的位置(员工数量不需要相同,毕竟不是在下中国象棋)。如下图所示:

 x01234567
y --------
0|QQQQQQQQ
1|3333333Q
2|3QQQQQ3Q
3|3Q333Q3Q
4|3Q3Q3Q3Q
5|3Q3QQQ3Q
6|3Q33333Q
7|3QQQQQQQ
其中 Q 代表 QQ 员工,3 代表 360 员工。比如场地 y = 3, x = 2 的位置是 360 员工。

战斗开始后,每个位置的参赛者都要检查周围八个方向(加上自己,一共九个位置),如果己方的实力(人数)不输于敌方,则下一刻这个位置依旧由己方控制;否则,在下一刻这个位置就会被敌方攻占!比如上面说的 y = 3, x = 2 位置,它周围的形势是:

 x123
y ---
2|QQQ
3|Q33
4|Q3Q
有 6个 QQ 员工,之后 3 个 360 员工,所以下一刻这个位置会被 QQ 占领,3 变成 Q。按照这样的方法,一直持续下去,直到整个战场的状态趋于稳定,即任何位置都不再有变化。这时候,统计一下战场上哪一方的人数多即最终胜利者。

Input
输入数据的第一行是一个整数 n(0 < n < 100),表示有 n 场比赛。
每一场比赛有 8行,并且每行有 8列。

Output
输出这场比赛的赢家:

如果 QQ 获胜,输出“Q”。
如果 360 获胜,输出“3”。
如果 QQ 和 360 打和,即人数一样多,则是“有关部门”获胜了,输出“D”。

Sample Input
3
3333QQQQ
3333QQQQ
3333QQQQ
3333QQQQ
3333QQQQ
3333QQQQ
3333QQQQ
3333QQQQ
QQQQQQQQ
3QQQQQQQ
33QQQQQQ
333QQQQQ
3333QQQQ
33333QQQ
333333QQ
3333333Q
33333333
3QQQQQQ3
3Q3333Q3
3Q3QQ3Q3
3Q3QQ3Q3
3Q3333Q3
3QQQQQQ3
33333333
Sample Output
D
Q
3

搜索更多相关主题的帖子: continue 
2012-02-07 19:21
xiangqiu1986
Rank: 2
等 级:论坛游民
帖 子:79
专家分:95
注 册:2011-5-5
收藏
得分:0 

学无止境!
2012-02-07 19:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,这不就是一个3Q版细胞自动机么。这题是哪个学校的,把网址发上来我去试试

重剑无锋,大巧不工
2012-02-07 20:13
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 3楼 beyondyf
http://acm.zjgsu.
前辈对那里应该有些熟悉了吧,劳烦了
2012-02-07 23:03
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
else if(three<QQ) <-----------------------------------qq
            printf("Q\n");
        else
            printf("D\n");<--------------,
    }                                    |
    return 0;                            |
}                                        |
                                         |
我觉得不可能和啊 9*9=81%2=1 -------------'

[ 本帖最后由 yxiangyxiang 于 2012-2-7 23:36 编辑 ]
2012-02-07 23:29
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 5楼 yxiangyxiang
谢谢,应该是8*9吧?
2012-02-08 11:49
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:20 
不好意思,今天太忙了。刚才有时间休息。
嗯,你的代码数据读入部分就不对,另外算法部分不符合题意。题目要求的是状态一真变换直到稳定,而不是只进行一次变换。
下面是AC代码。其中change_staus函数中那一堆if基本相当于你的panduan函数,只不过为了比较状态的方便,我将状态压缩到了一个64位整型。
程序代码:
#include <stdio.h>

typedef unsigned long long MAP;

MAP change_status(MAP a)
{
    int i, j, t, cq, c3;
    MAP b = 0;
    t = 0;
    for(i = 0; i < 8; i++)
    for(j = 0; j < 8; j++)
    {
        cq = c3 = 0;
        if((a >> t) & 1) cq++; else c3++;
        if(i > 0 && j > 0) if((a >> (t - 9)) & 1) cq++; else c3++;
        if(i > 0) if((a >> (t - 8)) & 1) cq++; else c3++;
        if(i > 0 && j < 7) if((a >> (t - 7)) & 1) cq++; else c3++;
        if(j > 0) if((a >> (t - 1)) & 1) cq++; else c3++;
        if(j < 7) if((a >> (t + 1)) & 1) cq++; else c3++;
        if(i < 7 && j > 0) if((a >> (t + 7)) & 1) cq++; else c3++;
        if(i < 7) if((a >> (t + 8)) & 1) cq++; else c3++;
        if(i < 7 && j < 7) if((a >> (t + 9)) & 1) cq++; else c3++;
        if(cq > c3) b |= 1LL << t;
        else if(cq == c3) b |= a & (1LL << t);
        t++;
    }
    return b;
}

char result(MAP a)
{
    MAP b;
    int i, c;
    for(b = change_status(a); b != a; b = change_status(a)) a = b;
    for(c = i = 0; i < 64; i++) c += (a >> i) & 1;
    if(c < 32) return '3';
    else if(c == 32) return 'D';
    else return 'Q';
}

int main()
{
    MAP a;
    int n, i, j;
    for(scanf("%d\n", &n); n--;)
    {
        a = 0;
        for(i = 0; i < 8; i++, getchar())
        for(j = 0; j < 8; j++)
        {
            a <<= 1;
            a += getchar() == 'Q';
        }
        printf("%c\n", result(a));
    }
    return 0;
}

重剑无锋,大巧不工
2012-02-08 23:58
快速回复:示例正确,提交不成功,怎么回事???
数据加载中...
 
   



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

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