幸运位置 (10分)

小明站在一个数字迷宫里,若其身边上、下、左、右四个相邻位置存在2个及以上的偶数,则小明认为其所站位置是一个幸运位置。给你一个数字迷宫(所有数字都是自然数),请你输出该迷宫的幸运位置,行号小的优先输出,若同一行号存在多个幸运位置,则按列号小的优先。

输入格式:

首先输入一个整数T(1<=T<10),表示测试组数。

每组测试首先在一行上输入两个整数m,n(2<m,n<21);然后输入一个的数字迷宫,包含m行n列的数字,每行数字之间以一个空格分隔。

输出格式:

对于每组测试,若不存在幸运位置,则输出“none”;否则,在一行上以“(r,c)”的格式输出各个幸运位置,其中r表示行号(从1开始),c表示列号(从1开始);每两个幸运位置之间间隔一个空格。引号不必输出。

输入样例:

2
3 4
85 34 67 11
11 38 67 76
34 11 25 31
3 3
85 79 93
31 91 85
31 90 85

 输出样例:

(2,1) (2,3) (3,2)
none

自己写的代码: 

#include<iostream>
using namespace std;
int chunzai(int k,int l,int m,int n)//判断下标是否越界,不越界返回1,越界返回0.
{
    if(k>=0&&k<m&&l>=0&&l<n) return 1;
    else return 0;
}
int main()
{
    int t;    //记录有几个数组
    cin>>t;
    while(t--){
        int m,n,a[22][22],i1[450],j1[450],f=0;    //循环内定义是为了当读入下一个数组时不用一个个清空数组。
        cin>>m>>n;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++) cin>>a[i][j];    //存入数组

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},cnt=0;    //每次判断都对cnt清零,便于统计,dx[]和dy[]数组为使位置上下左右移动。
                for(int g=0;g<4;g++){    //四次循环为了跑完上下左右四种情况。
                    if(chunzai(i+dx[g],j+dy[g],m,n))    //调用自己写的函数判断下标是否越界。
                        if(a[i+dx[g]][j+dy[g]]%2==0) cnt++;    //如果不越界就统计偶数个数。
                }
                if(cnt>=2){ i1[f]=i+1;j1[f]=j+1;f++;}    //如果附近的偶数个数大于等于2,说明为幸运数,将下标存放。
            }
        }
        if(f!=0){    //如果f!=0,说明该数组存在幸运数。
            for(int i=0;i<f;i++){
                printf("(%d,%d)",i1[i],j1[i]);
                if(i<f-1) cout<<' ';
            }
        }else cout<<"none";    //反之f==0,说明该数组没有幸运数。
        cout<<endl;
    }
    return 0;
}

 

贵州工程应用技术学院 2022级软件本小萌新。

 

 

 

  • 28
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值