问题描述
为了保证边境重要的军事基地不会被敌人入侵,我军在敌军的必经之路上埋了 𝑥 颗地雷,已知这片必经之地是 𝑛×𝑚 的方阵形状,为了让我们的友军知道哪些地方是有地雷的,我军工兵绘制了一张地雷分布图。在这张分布图中,如果某个点没有地雷,那么这个点所标记数字的各个位之和会是一个偶数;反之如果该点有地雷,这个点所标记数字的各个位之和是一个奇数。
请你编程计算出,该区域总共埋了多少颗地雷。
比如:下方有一张 5×6 的地雷分布图,其中埋有地雷的区域用灰色背景做了标记,该区域中共有 16 颗地雷。
输入
第一行有两个整数 𝑛和 𝑚,分别代表地图的大小有 𝑛 行 𝑚 列( 𝑛 和 𝑚 都是 10∼100之间的整数);
接下来 𝑛行,每行有 𝑚 个整数,代表是否有地雷的标记数(这些标记数都是 ≤100000 的整数)
输出
一个整数,代表该区域总共埋了多少颗地雷。
附参考代码:
#include<iostream>
using namespace std;
int main()
{
int n,m,z,x=0,sum=0,w;
cin>>n>>m;
int a[n][m];
for(int i=0;i<n;i++)//首先生成一个n行m列的阵列
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)//挨个访问二维数组里的数据
{
for(int j=0;j<m;j++)
{
sum=0;//这里是统计数据的各个位之和,每次都是新的数据所以每次访问时需要先归零
z=a[i][j];//将数据赋值给z,以防二维数组本身数据发生改变
while(1)//将访问的数据挨个使用短除法得到该数字的每一位,并将这些位数进行相加
{
w=z%10;
sum+=w;
z=z/10;
if(z==0)//除到该数字没有位数可除则跳出循环
break;
}
if(sum%2!=0)//来判断该各位数之和是否能对2整除,如果不能则该数位地雷数
{
x++; //地雷数+1;
}
}
}
cout<<x;//最后输出总的地雷数;
return 0;
}