您的位置:首页 > 其它

The Dreadful Seven hdu 2599 为何错啊 ?非常纠结的,难道测试数据里面没有ctrl + Z的。。

2010-05-16 09:51 447 查看
#include<iostream>//这个就wrong ,想不明白为何。。。比赛的时候在这个题目悲剧了!!
#include<cstdio>
#include<cstring>
using namespace std;

int dir[4][2] = {{-1 ,0}, {0, -1}, {0, 1}, {1 , 0}};

int main()
{
    int n, i, j;
    char str[20];
    int map[105][105];
    while(scanf("%d", &n) != EOF)//后来比赛后听说这里直接用%S 读入,就可以过了,是数字的话判断下
    //while(1)
    {
    //    memset(map, 0, sizeof(map));
    //    scanf("%d", &n);
        for(i = 0; i < n; i++)
            for(j = 0; j < n; j++)
                scanf("%d", &map[i][j]);
            while(scanf("%s", str) != EOF)
            {
                if(strcmp(str, "SHOW") == 0)
                {
                    for(i = 0; i < n; i++)
                    {
                        for(j = 0; j < n; j++)
                        {
                            if(j == n - 1)
                                printf("%d", map[i][j]);
                            else
                                printf("%d ", map[i][j]);
                        }
                        printf("/n");
                    }
                    printf("/n");
                    continue;
                }
                else if(strcmp(str, "NEIGHBORS") == 0)
                {
                    int tt;
                    scanf("%d", &tt);
                    //getchar();
                    int x, y;
                    for(i = 0; i < n; i++)
                    for(j = 0; j < n; j++)
                    {
                        if(map[i][j] == tt)
                        {
                            x = i;
                            y = j;
                            break;
                        }
                    }
                    int x1, y1;
     int count = 0;
     int num[20];
                    for( i= 0; i < 4; i++)
                    {
                        x1 = x + dir[i][0];
                        y1 = y + dir[i][1];
                        if(x1 >= 0 && x1 < n && y1 >= 0 && y1 < n)
                        {
                         num[count++] = map[x1][y1];
                            //if(i != 3)
                               // printf("%d ",map[x1][y1]);//这里格式有错误
                            //else
                            //printf("%d/n",map[x1][y1]);
                        }
                    }
                    for(i = 0; i < count; i++)//这里PE了好久。。separated by spaces谢文策让我看的这句话
                    {
                     if(i != count - 1)
                     printf("%d ", num[i]);
                     else
                     printf("%d/n", num[i]);
     }
                    //printf("/n");
                }
       
            }
       
    }
}

 

AC code:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int dir[4][2] = {{-1 ,0}, {0, -1}, {0, 1}, {1 , 0}};

int main()
{
    int n, i, j, x;
    char str[20];
    int map[105][105];
    int x0, y0;
    //while(scanf("%d", &n) != EOF)
    //while(1)
    while(scanf("%s", str) != EOF)
    {
    //    memset(map, 0, sizeof(map));
    //    scanf("%d", &n);
   
        if(str[0] >= '0' && str[0] <= '9')
        {
                n = 0;
            for(i = 0; i < strlen(str); i++)   
            {
                n = 10 * n + str[i] - '0';
            }
            for(i = 0; i < n; i++)
            for(j = 0; j < n; j++)
            {  
    scanf("%d", &map[i][j]);
    if(map[i][j] == 0)
    {
     x0 = i;
     y0 = j;
    }
            }
        }
       
            //while(scanf("%s", str) != EOF)
           // {
                else if(strcmp(str, "SHOW") == 0)
                {
                    for(i = 0; i < n; i++)
                    {
                        for(j = 0; j < n; j++)
                        {
                            if(j == n - 1)
                                printf("%d", map[i][j]);
                            else
                                printf("%d ", map[i][j]);
                        }
                        printf("/n");
                    }
                    printf("/n");
                    continue;
                }
                else
                //if(strcmp(str, "NEIGHBORS") == 0)
                {
                    int tt;
                    scanf("%d", &tt);
                    //getchar();
                    int x, y;
                    for(i = 0; i < n; i++)
                    for(j = 0; j < n; j++)
                    {
                        if(map[i][j] == tt)
                        {
                            x = i;
                            y = j;
                            break;
                        }
                    }
                    int x1, y1;
                    int num = 0;
                    int ss[10];
                    for( i= 0; i < 4; i++)
                    {
                        x1 = x + dir[i][0];
                        y1 = y + dir[i][1];
                        if(x1 >= 0 && x1 < n && y1 >= 0 && y1 < n)
                        {
                            ss[num++] = map[x1][y1];
                          //    if(x1 == n - 1 || y1 == n - 1)
                               // printf("%d",map[x1][y1]);
                           // else
                                //printf("%d ",map[x1][y1]);
                        }
                    }
                    for(i = 0; i < num; i++)
                    if(i != num - 1)
                        printf("%d ", ss[i]);
                       else
                         printf("%d/n", ss[i]);
               // }
       
            }
       
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试
相关文章推荐