CCF 201912-2 《回收站选址》C语言满分题解

问题描述:

CCF 201912-2 《回收站选址》C语言满分题解_第1张图片CCF 201912-2 《回收站选址》C语言满分题解_第2张图片

思路:

题目测试数据较大,开个特别大的二维数组明显不对,但垃圾堆的个数n最大才1000的,每次查找遍历1000个数组,对计算机运算压力不大。
因此可以开个二维数组 rubbish[n][2]
n代表垃圾堆个数,rubbish[n][0]表示x坐标,rubbish[n][1]表示y坐标
查看某点是否具有垃圾堆,遍历垃圾堆数组即可。

代码:

#include 
/*垃圾堆最多有1000个,且需要两个数存储坐标,
这两个数绝对值都不大于10^9,所以用int二维数组即可
rubbish[*][0]储存x坐标,rubbish[*][1]储存y坐标
'*'代表任意序号的垃圾堆*/
int rubbish[1000][2];

//通过遍历每个垃圾堆的坐标是否与给定坐标相同,判断给定坐标位置是否有垃圾堆
//x,y表示给定坐标,n代表垃圾堆的个数
int findRubbish(int x, int y, int n)
{
     
    for (int i = 0; i < n; i++)
    {
     
        if (rubbish[i][0] == x && rubbish[i][1] == y)
            return 1;
    }
    return 0;
}
int main()
{
     
    //垃圾堆个数
    int n;
    //坐标
    int x, y;
   
    //各分数垃圾堆的个数
    int score_0 = 0;
    int score_1 = 0;
    int score_2 = 0;
    int score_3 = 0;
    int score_4 = 0;
    //读入垃圾堆个数
    scanf("%d", &n);
    //再读入n个垃圾堆
    for (int i = 0; i < n; i++)
    {
     
        scanf("%d %d", &rubbish[i][0], &rubbish[i][1]);
    }
    for (int i = 0; i < n; i++)
    {
     
        x = rubbish[i][0];
        y = rubbish[i][1];
        //判断上下左右四个点是否具有垃圾堆
        if (findRubbish(x - 1, y, n) && findRubbish(x + 1, y, n) 
            && findRubbish(x, y + 1, n) && findRubbish(x, y - 1, n))
        {
      
            //四个斜角垃圾堆的个数
            int score = 0;
            //如果有的话,再计算四个斜角有垃圾堆的个数
            if(findRubbish(x - 1, y - 1, n))score++;
            if(findRubbish(x - 1, y + 1, n))score++;
            if(findRubbish(x + 1, y - 1, n))score++;
            if(findRubbish(x + 1, y + 1, n))score++;
            //根据分数,对该分数的垃圾堆个数+1
            if(score==0) score_0++;
            if(score==1) score_1++;
            if(score==2) score_2++;
            if(score==3) score_3++;
            if(score==4) score_4++;

        }
    }
    //输出结果
    printf("%d\n",score_0);
    printf("%d\n",score_1);
    printf("%d\n",score_2);
    printf("%d\n",score_3);
    printf("%d\n",score_4);
}
提示:因为学c语言的时候就一直混用c++语法,所以本题虽然我是纯按c语言的语
法写的,我的编译器也可以运行,但提交的时候只能交C++,交C会编译报错。

你可能感兴趣的:(CCF题解,c++,算法)