4 条题解
-
1
yasuo👀️
yasuo甚至可以开三维数组,而只是为了压缩代码
#include <iostream> #include <cstdio> int main(){ int m,n,sum=0,a[2][105][105];std::cin>>m>>n; for(int c=0;c<2;c++) for(int i=0;i<m;i++) for(int j=0;j<n;j++){ std::cin>>a[c][i][j]; if(c==1&&a[c][i][j]==a[c-1][i][j]) sum++;} printf("%.2lf",100.0*sum/m/n);return 0;}
-
1
思路:
- 首先,通过cin输入m和n,分别表示图像的行数和列数。
- 创建两个二维向量image1和image2,分别存储第一幅图像和第二幅图像的像素点颜色。这里使用vector<vector<int>>来表示二维向量。
- 使用嵌套循环读取用户输入的第一幅图像的像素点颜色,并将其存储在image1中。
- 同样地,使用嵌套循环读取用户输入的第二幅图像的像素点颜色,并将其存储在image2中。
- 初始化相似度计数器count为0。
- 再次使用嵌套循环遍历每个像素点。如果image1和image2对应位置的像素点颜色相同,就将count加1。
- 计算相似度similarity,即count除以总的像素点数(m * n),再乘以100。这里使用了static_cast<double>来进行类型转换,使得结果保留小数位。
- 使用cout输出相似度,设置输出格式为固定小数点后两位。
- 返回0,表示程序成功执行结束。
通过比较两幅图像的像素点颜色来计算相似度。如果两个像素点颜色相同,则认为它们是相似的。最后根据相似的像素点数与总的像素点数的比例来计算相似度。
C++:
#include <iostream> #include <vector> #include <iomanip> using namespace std; int main() { int m, n; cin >> m >> n; // 存储第一幅图像的像素点颜色 vector<vector<int> > image1(m, vector<int>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> image1[i][j]; } } // 存储第二幅图像的像素点颜色 vector<vector<int> > image2(m, vector<int>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> image2[i][j]; } } // 计算相似度 int count = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (image1[i][j] == image2[i][j]) { count++; } } } double similarity = static_cast<double>(count) / (m * n) * 100; // 输出相似度,保留两位小数 cout << fixed << setprecision(2) << similarity << endl; return 0; }
py:简写版
def total_pixels = len(image1) * len(image1[0]) same_pixels = sum(image1[i][j] == image2[i][j] for i in range(len(image1)) for j in range(len(image1[0]))) similarity = (same_pixels / total_pixels) * 100 return "{:.2f}".format(similarity) m, n = map(int, input().split()) image1 = [list(map(int, input().split())) for _ in range(m)] image2 = [list(map(int, input().split())) for _ in range(m)] similarity = calculate_similarity(image1, image2) print(similarity)
-
1
#include<bits/stdc++.h> using namespace std; int main(){ int m,n,a[105][105],b[105][105],k=0; 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]); for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(a[i][j]==b[i][j]) k++; printf("%0.2lf",k*100.0/m/n); return 0; }
-
0
这道题先处理数据,用两个二维数组a和b分别存储两次图片的信息,然后再判断是否相同,最后用相同的部分/mn100%就行,代码如下:
#include <bits/stdc++.h> using namespace std; int main() { int a[105][105]; int b[105][105]; int m,n; double same = 0; 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>> b[i][j]; } } for(int i = 1;i<=m;i++) { for(int j = 1;j<=n;j++) { if(a[i][j]==b[i][j]) same += 1; } } cout << fixed <<setprecision(2)<<same /double(m*n)*100; return 0; }
- 1
信息
- ID
- 205
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 91
- 已通过
- 65
- 上传者