题面
题目:图像相似度
问题描述
给出两幅相同大小的黑白图像(用
0-1
矩阵)表示,求它们的相似度。若两幅图像在相同位
置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相
同像素点数占总像素点数的百分比。
输入格式
第一行包含两个整数
m
和
n
,表示图像的行数和列数,用单个空格隔开。
1
≤
m
≤
100, 1
≤
n
≤
100
。之后
m
行,每行
n
个整数
0
或
1
,表示第一幅黑白图像上各像素点的颜色,相邻两
个数用单个空格隔开。之后
m
行,每行
n
个整数
0
或
1
,表示第二幅黑白图像上各像素点
的颜色,相邻两个数用单个空格隔开。
输出格式
一个实数,表示相似度
(
以百分比的形式给出
)
,精确到小数点后两位。
样例输入
3 3
1 1 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1
样例输出
55.56
样例说明
第一行的
3 3
表示图像的大小是
3
×
3
。
2-4
行表示第一幅图像对应位置的数值,
5-7
行表示
第二幅图像对应位置的数值。每幅图像像素点数为
9
,相同位置相同数值的个数为
5
个,相
似度为
5
/9
,相似度
(
以百分比的形式给出
)
保留两位小数为
55.56.
评测用例规模与约定
1
≤
m
≤
100
,
1
≤
n
≤
100
。
题解
题目分析
对比两个数组,统计同位置数值相同的数的个数
思路
- 输入行数、列数,输入第一个矩阵,用二位数组记录
- 逐一输入第二个矩阵的数,并与一个数组相应位置的数比较并统计相同数的数量
- 输出相同数的比例
满分代码(含注释)
#include <iostream>
#include <iomanip> // 控制浮点型输出的小数位数
using namespace std;
int m, n, t, num_of_equalnums; // 行,列,临时数,相同数的个数个数
int a[101][101]; // 二维数组存储第一个矩阵(图像)
int main()
{
cin >> m >> n;
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> t;
if (t == a[i][j])
{
num_of_equalnums ++; // 如果相同,计数器加一
}
}
}
cout << fixed << setprecision(2) << num_of_equalnums * 1.0 / (n * m) * 100;
// 控制输出精度到小数点后2位
// 相同数百分比
return 0;
}
纯享版代码 (不含注释)
#include <iostream>
#include <iomanip>
using namespace std;
int m, n, t, num_of_equalnums;
int a[101][101];
int main()
{
cin >> m >> n;
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> t;
if (t == a[i][j])
{
num_of_equalnums ++;
}
}
}
cout << fixed << setprecision(2) << num_of_equalnums * 1.0 / (n * m) * 100;
return 0;
}
date:20240104