把两幅 01 图像展开成一维序列,线性统计对应位置像素相等的个数,再按百分比输出。
OJ: roj
题目 ID: 1123
难度:入门
标签:python模拟输入输出数组
创建: 2026-09-29 19:49
更新: 2026-10-05 02:45
题目描述
给出两幅大小相同的黑白图像,每幅是一个 3 3,第一幅为 1 0 1 / 0 0 1 / 1 1 0,第二幅为 1 1 0 / 0 0 1 / 0 0 1;输出样例:44.44。
思路
直接把两幅图像逐位置比较:读入两个矩阵后双重循环统计 same,相似度就是 same / (m*n) * 100,用浮点输出并保留两位小数即可。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 19:49
# update_at: 2026-09-29 19:50
import sys
def solve() -> None:
data = iter(map(int, sys.stdin.buffer.read().split()))
m, n = next(data), next(data) # 行数、列数
total = m * n # 总像素数
a = [next(data) for _ in range(total)] # 第一幅图像
b = [next(data) for _ in range(total)] # 第二幅图像
same = sum(x == y for x, y in zip(a, b)) # 对应位置颜色相同个数
print(f"{same / total * 100:.2f}")
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-05 02:45
* update_at: 2026-10-05 02:46
*/
#include <cstdio>
typedef long long ll;
const int MAXN = 105; // 图像最大行/列数
ll m, n; // 图像的行数、列数
int a[MAXN][MAXN], b[MAXN][MAXN]; // 第一幅、第二幅 01 图像
int main() {
scanf("%lld %lld", &m, &n);
// 读入第一幅图像
for (ll i = 0; i < m; i++)
for (ll j = 0; j < n; j++)
scanf("%d", &a[i][j]);
// 读入第二幅图像
for (ll i = 0; i < m; i++)
for (ll j = 0; j < n; j++)
scanf("%d", &b[i][j]);
ll same = 0; // 对应位置像素相同的个数
for (ll i = 0; i < m; i++)
for (ll j = 0; j < n; j++)
if (a[i][j] == b[i][j])
same++;
// 相同像素占总像素的百分比,保留两位小数
printf("%.2f\n", same * 100.0 / (m * n));
return 0;
}