BC135. 图像相似度
描述
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。输入描述
第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。输出描述
一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。示例1
输入:
3 3 1 0 1 0 0 1 1 1 0 1 1 0 0 0 1 0 0 1
输出:
44.44
C 解法, 执行用时: 1ms, 内存消耗: 348KB, 提交时间: 2021-01-23
#include<stdio.h> int main() { int m, n; int a[100][100], b[100][100]; scanf("%d %d", &m, &n); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { scanf("%d", &a[i][j]); } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { scanf("%d", &b[i][j]); } } int c = m * n; float k=0, sum; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (a[i][j]==b[i][j]) { k++; } } } sum = (k / c)*100.0; printf("%.2f", sum); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2021-06-15
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main() { //输入 int m, n;//行列 int sum = 0;//总像素点 int count = 0;//相同像素点 scanf("%d %d", &m, &n); sum = m * n; int* a = (int*)malloc(sizeof(int)*m*n);//开拓2个n*m的空间 int* a1 = (int*)malloc(sizeof(int)*m*n);//开拓2个n*m的空间 assert(a); assert(a1); int i = 0; //接收第一个图每行每列的元素 for(i = 0; i < m*n; i++) { scanf("%d ", &a[i]); } //接收第二个图每行每列的元素 for(i = 0; i < m*n; i++) { scanf("%d ", &a1[i]); //求相同像素点 if(a[i] == a1[i]) count++; } //输出 printf("%.2f\n", count/(sum*1.0) * 100); return 0; }
C++14 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2020-07-10
#include<stdio.h> int main() { int m,n; scanf("%d %d",&m,&n); int a[m][n],b[m][n]; int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&b[i][j]); } } int sum; for(i=0,sum=0;i<m;i++) { for(j=0;j<n;j++) { if(a[i][j]==b[i][j]) { sum++; } } } printf("%.2lf",(100.0*sum)/(m*n)); }
C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2020-06-06
#include <stdio.h> int main() { int n,m,i,j,a[100][100],b[100][100]; float count1,count2,sum; scanf("%d %d",&m,&n); for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&b[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { count1++; if(a[i][j] == b[i][j]) { count2++; } } } sum = (count2/count1)*100; printf("%.2f",sum); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2021-04-26
#include<stdio.h> int main(){ int m,n,i,j,a = 0; scanf("%d %d",&m,&n); int arr[m][n],arr1[m][n]; for(i = 0; i < m;i++){ for(j = 0;j < n;j++){ scanf("%d", &arr[i][j]); } }for(i = 0; i < m;i++){ for( j = 0;j < n;j++){ scanf("%d", &arr1[i][j]); } }for(i = 0;i < m;i++){ for( j = 0;j < n;j++){ if(arr[i][j] == arr1[i][j]){ a++; } } }float b = (a*100.00)/(m * n); printf("%.2f",b); return 0; }