【问题描述】
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,则称该矩阵为稀疏矩阵。
对于一个矩阵Mat来说,若统计0元素的数量为C,非0元素的数量为D,则当C超过(包含等于)D的三倍时,该矩阵Mat为稀疏矩阵,否则矩阵Mat为非稀疏矩阵。
现给定一个n行m列的矩阵Mat,判断矩阵Mat是否为稀疏矩阵
【输入格式】
第一行有两个正整数n和m,用空格隔开,表示矩阵Mat的行数和列数
接下来n行,每行m个整数,表示矩阵元素,每个整数之间用空格隔开
每个样例包含多组测试数据,每组测试数据之间有一个空白行
当n和m都是0时,程序结束
【输出格式】
若干行,每行为YES或者NO,当矩阵Mat为稀疏矩阵时,输出YES,否则输出NO
【样例输入】
2 2
1 1
1 1
2 2
0 0
0 0
2 2
1 1
0 0
2 2
0 0
0 4
2 3
0 0 0
0 8 0
0 0
【样例输出】
NO
YES
NO
YES
YES
【样例解释】
第一个2行2列的矩阵,都是非0元素,没有0元素,因此是非稀疏矩阵,输出NO
第二个2行2列的矩阵,都是0元素,没有非0元素,因此是稀疏矩阵,输出YES
第三个2行2列的矩阵,0元素和非0元素的数量相等,都是2,因此输出NO
第四个2行2列的矩阵,0的数量为3,非0元素只有1个4,因此3/1=3,正好三倍,输出YES
第五个2行3列的矩阵,0的数量为5,非0元素只有1个8,因此5/1=5,超过三倍,输出YES
【数据范围】
对于100%的数据:1<=n,m<=100,矩阵元素都是100以内的非负整数,每个样例不超过50个矩阵,最后的n和m必然为0
本蒟蒻代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a[101][101],x,y;
cin >> n >> m;
while(n!=0&&m!=0){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];
if(a[i][j]==0) x++;
else y++;
}
}
int y3=y*3;
if(x>=y3) cout << "YES";
else cout << "NO";
cin >> n >> m;
}
return 0;
}
求找茬谢谢!!!