zoukankan      html  css  js  c++  java
  • 大炮打蚊子 ( 数组的应用 )

      代码来源于青岛大学,周强老师的数据结构与算法实战mooc

      算法思想,其一,利用 int 二维数组的值表示是否有蚊子,0表示没有,2表示有,值大于0用来判断有蚊子;其二,简化函数,利用五次调用函数,来实现炮弹落点及对落点上下左右的蚊子的伤害,在落点的蚊子生命减2,不在落点的生命减1,用kill表示减少的值 ( 对应落点或落点的上下左右 );

     

    /* 
    输入样例
    
    5 6
    00#00#
    000###
    00#000
    000000
    00#000
    2
    1 2
    1 4
    
     */
    #include <stdio.h>
    
    int board[20][20];
    int M,N;
    
    int bang(int x, int y, int kill){  //x,y 是落点或落点上下左右的坐标, kill代表减少的生命值
        if( (x>=0&&x<M) && (y>=0&&y<N) && board[x][y]>0 ){  //x y 合法 且 有蚊子
            board[x][y] -= kill;
            if( board[x][y]<=0 ) return 1;  //  board[x][y]<=0 蚊子被杀死
        } 
        return 0;
    }
    
    int main(void)
    {
        scanf("%d%d", &M, &N);
        getchar(); //读掉回车
        
        for(int i=0; i<M; ++i){
            for(int j=0; j<N; ++j){
                board[i][j] = getchar()== '0' ? 0 : 2;  // 字符 '0' 
            }
            getchar(); //读掉回车
        }
     
        int k;
        scanf( "%d", &k ); //炮弹数
        
        for(int i=0; i<k; ++i){
            int x, y;
            scanf( "%d%d", &x, &y ); //落点坐标
            int count = 0; 
            count += bang( x, y, 2 ); //落点
            count += bang( x-1, y, 1 ); //落点左
            count += bang( x+1, y, 1 ); //落点右
            count += bang( x, y+1, 1 ); //落点上
            count += bang( x, y-1, 1 ); //落点下
            printf( "%d
    ",count );
        }
      
        return 0;
    }
  • 相关阅读:
    elasticDump的安装使用
    centos7中给Elasticsearch5 安装bigdesk
    centos7下Elasticsearch5.2.2和head 插件环境搭建
    渗透测试入门DVWA 环境搭建
    windows环境下运行Elasticsearch
    UltraISO刻录CentOS 7安装指南
    TCP 协议中的 Window Size与吞吐量
    php 抛出异常
    php获取字符串长度
    php批量转换时间戳
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/14155736.html
Copyright © 2011-2022 走看看