(来自蒟蒻的)一道题(或许是站外题??)的求助
  • 板块题目总版
  • 楼主玖沂
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/4 16:53
  • 上次更新2023/11/4 04:52:50
查看原帖
(来自蒟蒻的)一道题(或许是站外题??)的求助
409013
玖沂楼主2021/10/4 16:53
【问题描述】
在矩阵中,若数值为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;
}

求找茬谢谢!!!

2021/10/4 16:53
加载中...