4 条题解

  • 1
    @ 2023-7-31 21:39:54

    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
      @ 2023-7-7 17:10:04

      思路:

      1. 首先,通过cin输入m和n,分别表示图像的行数和列数。
      2. 创建两个二维向量image1和image2,分别存储第一幅图像和第二幅图像的像素点颜色。这里使用vector<vector<int>>来表示二维向量。
      3. 使用嵌套循环读取用户输入的第一幅图像的像素点颜色,并将其存储在image1中。
      4. 同样地,使用嵌套循环读取用户输入的第二幅图像的像素点颜色,并将其存储在image2中。
      5. 初始化相似度计数器count为0。
      6. 再次使用嵌套循环遍历每个像素点。如果image1和image2对应位置的像素点颜色相同,就将count加1。
      7. 计算相似度similarity,即count除以总的像素点数(m * n),再乘以100。这里使用了static_cast<double>来进行类型转换,使得结果保留小数位。
      8. 使用cout输出相似度,设置输出格式为固定小数点后两位。
      9. 返回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
        @ 2023-6-25 13:30:54
        #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
          @ 2024-6-15 20:33:54

          这道题先处理数据,用两个二维数组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
          上传者