【NOI-题解】1407. 图像相似度1330. 求最大梯形的面积1384. 靶心数1398. 奇偶统计

news2024/11/13 8:14:55

文章目录

  • 一、前言
  • 二、问题
    • 问题:1407. 图像相似度
    • 问题:1330. 求最大梯形的面积
    • 问题:1384. 靶心数
    • 问题:1398. 奇偶统计
  • 三、感谢

一、前言

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》

本章节主要对,包括《1407. 图像相似度》《1330. 求最大梯形的面积》《1384. 靶心数》《1398. 奇偶统计》题目。

二、问题

问题:1407. 图像相似度

类型:二维数组


题目描述:

给出两幅相同大小的黑白图像(用 0−1 矩阵表示,0 代表白色,1 代表黑色)表示,求它们的相似度。

说明:若两幅图像在相同位置上的像素点颜色的值相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

比如:输入

2 2
1 0
0 1
1 1
1 1

数据解释:第一行的 2 2 表示图像的尺寸是 2 行,每行 2 个整数;接下来的两行数据 1 0 和 0 1 表示第一幅图片的数值,再接下来两行数据 1 1 和 1 1 表示第二幅图片的数值;

从数据上可以看出,两幅图片有 2 个数是相等的,因此两幅图片的相似度为 50%,实际输出不需要输出百分号,结果保留 2 位小数,因此实际输出 50.00 。

输入:

第一行包含两个整数 n 和 m ,表示图像的行数和列数,中间用单个空格隔开。(1≤n,m≤100)

之后 n 行,每行 m 个整数 0 或 1 ,表示第一幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
之后 n 行,每行 m 个整数 0 或 1 ,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。

输出:

一个小数,表示相似度(以百分比的形式给出,但百分号不需要显示),精确到小数点后两位。

样例:

输入:

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出:

44.44

在这里插入图片描述


1.分析问题

  1. 已知:两幅相同大小的黑白图像(用 0?1 矩阵表示,0 代表白色,1 代表黑色);

  2. 未知:求它们的相似度(不需要输出百分号,结果保留 2 位小数)。

  3. 关系:两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

2.定义变量

  • n:存储图像的行数。
  • m:存储图像的列数。
  • p:二维数组,用于存储第一幅图像的像素值。
  • xs:双精度浮点型变量,用于存储相同像素点的数量。
	//二、数据定义 
	int n,m,p[101][101]; 
	double xs=0;

3.输入数据

  • 通过cin输入第一幅图像的行数n和列数m。
  • 再通过两层循环输入第一幅图像的每一个像素值。
	//三、数据输入 
	cin>>n>>m;
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			cin>>p[i][j];
		} 
	}

4.数据计算

  • 对于第二幅图像的每一个像素值,在输入的同时与第一幅图像对应位置的像素值比较。
  • 如果两个图像在同一位置的像素值相同,则将xs加1。
//四、数据计算 
	int t;
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			cin>>t;
			if(t==p[i][j]) ++xs;
		} 
	}

5.输出

  • 使用fixed和setprecision(2)设置输出格式,确保输出的相似度保留两位小数。
  • 输出相似度,即相同像素点的数量除以总的像素点数量再乘以100,得到百分比形式的相似度。
//五、输出结果 
	cout<<fixed<<setprecision(2)<<xs*100/n/m;

完整代码如下:

#include <bits/stdc++.h> // 包含所有标准库,适用于竞赛环境,但不推荐在正式项目中使用
using namespace std;     // 为了简化代码,使用标准命名空间

int main() {
    // 问题分析
    // 已知条件:两幅相同大小的黑白图像(用 0-1 矩阵表示,0 代表白色,1 代表黑色)。
    // 求解:求它们的相似度(不需要输出百分号,结果保留 2 位小数)。
    // 关系:两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

    // 数据定义
    int n, m; // 图像的行数和列数
    int p[101][101]; // 第一幅图像的矩阵
    double xs = 0; // 相同像素点的数量

    // 数据输入
    cin >> n >> m; // 输入第一幅图像的行数n和列数m
    for (int i = 0; i < n; ++i) { // 输入第一幅图像的数据
        for (int j = 0; j < m; ++j) {
            cin >> p[i][j];
        }
    }

    // 数据计算
    int t; // 临时变量,用于存储第二幅图像的每个像素值
    for (int i = 0; i < n; ++i) { // 输入第二幅图像的数据,并同时计算相同像素点的数量
        for (int j = 0; j < m; ++j) {
            cin >> t;
            if (t == p[i][j]) {
                ++xs; // 如果当前像素相同,则增加相同像素点计数器
            }
        }
    }

    // 输出结果
    cout << fixed << setprecision(2) << xs * 100 / (n * m); // 输出相似度,保留两位小数
    return 0; // 程序正常结束
}

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》

问题:1330. 求最大梯形的面积

类型:二维数组


题目描述:

从键盘读入 n ( 3≤n≤100 )个梯形的上底、下底和高,请问这 n 个梯形中,最大面积的梯形的面积是多少?

(梯形面积的求解公式为 S=(a+b)×h/2 ,也就是 (上底+下底)×高/2 )

输入:

第 1 行为 1 个整数 n ,接下来 n 行每行 3 个整数分别代表梯形的上底、下底和高。

输出:

最大面积梯形的面积(结果保留 1 位小数)

样例:

输入:

3
1 2 3
3 4 5
2 3 4

输出:

17.5

在这里插入图片描述


1.分析问题

  1. 已知: n ( 3≤n≤100 )个梯形的上底、下底和高;

  2. 未知:请问这 n 个梯形中,最大面积的梯形的面积是多少?(结果保留 1 位小数)

  3. 关系:梯形面积的求解公式为 S=(a+b)×h/2 。

2.定义变量

  • n:存储梯形的数量。
  • a、b、h:分别存储梯形的上底、下底和高。
  • s:双精度浮点型变量,用于存储最大面积。
  • t:双精度浮点型变量,用于存储当前梯形的面积。
	//二、数据定义 
	int n,a,b,h;
	double s=0,t;

3.输入数据

  • 通过cin输入梯形的数量n。
  • 再通过两层循环输入每个梯形的上底、下底和高。
	//三、数据输入 
	cin>>n;

4.数据计算

  • 在输入每个梯形的数据的同时,计算每个梯形的面积t。
  • 使用公式 (a + b) * h / 2.0 来计算面积。
  • 如果当前梯形的面积t大于之前记录的最大面积s,则更新最大面积s。
	//四、数据计算 
	for(int i=0;i<n;++i){
		cin>>a>>b>>h;
		t=(a+b)*h/2.0;
		s=s>t?s:t;
	}

5.输出

  • 使用fixed和setprecision(1)设置输出格式,确保输出的最大面积保留一位小数。
	//五、输出结果 
	cout<<fixed<<setprecision(1)<<s;

完整代码如下:

#include <bits/stdc++.h> // 包含所有标准库,适用于竞赛环境,但不推荐在正式项目中使用
using namespace std;     // 为了简化代码,使用标准命名空间

int main() {
    // 问题分析
    // 已知条件:有 n 个梯形的上底、下底和高(3 ≤ n ≤ 100)。
    // 求解:求这 n 个梯形中最大面积的梯形的面积(结果保留 1 位小数)。
    // 关系:梯形面积的求解公式为 S = (a + b) × h / 2。

    // 数据定义
    int n, a, b, h; // 定义梯形的上底a、下底b、高h以及梯形的数量n
    double s = 0, t; // s 用于保存最大面积,t 用于保存当前梯形的面积

    // 数据输入
    cin >> n; // 输入梯形的数量 n
    // 数据计算
    for (int i = 0; i < n; ++i) { // 循环读取每个梯形的信息
        cin >> a >> b >> h; // 输入当前梯形的上底a、下底b和高h
        t = (a + b) * h / 2.0; // 计算当前梯形的面积
        if (t > s) { // 如果当前梯形的面积大于之前记录的最大面积
            s = t; // 更新最大面积
        }
    }

    // 输出结果
    cout << fixed << setprecision(1) << s; // 输出最大面积,保留一位小数
    return 0; // 程序正常结束
}

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》

问题:1384. 靶心数

类型:二维数组


题目描述:

James 同学发现了在二维数组中有这样一类数,这个数正好比自己上下左右四个方向的数都大(由于需要比四个方向的数都大,因此这个数不可能在第一行、最后一行、第一列、最后一列), James 把它们称为靶心数。

请你编程求出一个二维数组的靶心数有哪些,输出他们。

输入:

第一行是两个整数 n 和 m(n 和 m 都是 4∼100 之间的整数),代表接下来的二维数组有 n 行 m 列。

接下来 n 行,每行有 m 个整数。

输出:

请按照输入的顺序输出满足条件的靶心数,每行 1 个。

样例:

输入:

4 4
1 2 3 4
5 6 5 8
9 1 11 10
13 4 5 16

输出:

6
11

在这里插入图片描述


1.分析问题

  1. 已知:二维数组;
  2. 未知:求出一个二维数组的靶心数有哪些,输出他们;
  3. 关系:这个数正好比自己上下左右四个方向的数都大(由于需要比四个方向的数都大,因此这个数不可能在第一行、最后一行、第一列、最后一列)。

2.定义变量

  • n:存储二维数组的行数。
  • m:存储二维数组的列数。
  • a:二维数组,用于存储输入的数字。
	//二、数据定义 
	int n,m,a[101][101]; 

3.输入数据

  • 通过cin输入二维数组的行数n和列数m。
  • 再通过两层循环输入二维数组的每一个元素。
//三、数据输入 
	cin>>n>>m;
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			cin>>a[i][j];
		}
	}

4.数据计算

  • 遍历数组的每一个非边界元素(即排除第一行、最后一行、第一列和最后一列的元素)。
  • 对于每一个非边界元素,检查它是否比它的上、下、左、右四个方向的数都大。
  • 如果满足条件,则输出这个数。
//四、数据计算 
	for(int i=1;i<n-1;++i){
		for(int j=1;j<n-1;++j){
			if(a[i][j]>a[i-1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i][j+1]&&a[i][j]>a[i+1][j]) cout<<a[i][j]<<endl;
		}
	}

完整代码如下:

#include <bits/stdc++.h> 
using namespace std;

int main() {
    // 问题分析
    // 已知条件:一个二维数组。
    // 求解:找出这个二维数组中的“靶心数”并输出。
    // 关系:这个数正好比自己上下左右四个方向的数都大(由于需要比四个方向的数都大,因此这个数不可能在第一行、最后一行、第一列、最后一列)。

    // 数据定义
    int n, m; // 定义二维数组的行数n和列数m
    int a[101][101]; // 定义二维数组a用于存储输入的数字

    // 数据输入
    cin >> n >> m; // 输入二维数组的行数n和列数m
    for (int i = 0; i < n; ++i) { // 逐行输入二维数组的值
        for (int j = 0; j < m; ++j) {
            cin >> a[i][j]; // 输入当前单元格的值
        }
    }

    // 数据计算
    // 注意:由于靶心数不能位于数组的边缘,所以i和j的范围从1到n-2和m-2
    for (int i = 1; i < n - 1; ++i) { // 遍历数组的每一行(排除边界)
        for (int j = 1; j < m - 1; ++j) { // 遍历数组的每一列(排除边界)
            if (a[i][j] > a[i - 1][j] && // 当前数大于上方的数
                a[i][j] > a[i + 1][j] && // 当前数大于下方的数
                a[i][j] > a[i][j - 1] && // 当前数大于左边的数
                a[i][j] > a[i][j + 1]) { // 当前数大于右边的数
                cout << a[i][j] << endl; // 输出当前数
            }
        }
    }

    return 0; // 程序正常结束
}

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》

问题:1398. 奇偶统计

类型:二维数组


题目描述:

在一个n行m列的二维数组中,有若干奇数和偶数,请编程统计出这个二维数组中,奇数和偶数分别有多少个?

输入:

第一行是两个整数n和m(n和m都是4~100之间的整数),代表接下来的二维数组有n行m列。
接下来n行,每行有m个整数。(这些整数都是0~9999之间的整数)

输出:

两个整数用空格隔开,分别代表二维数组中奇数、偶数的个数

样例:

输入:

2 2
2 3
4 6

输出:

1 3

在这里插入图片描述


1.分析问题

  1. 已知:一个n行m列的二维数组;
  2. 未知:统计出这个二维数组中,奇数和偶数分别有多少个?
  3. 关系:模运算、累计和。

2.定义变量

  • n:存储二维数组的行数。
  • m:存储二维数组的列数。
  • t:临时变量,用于存储输入的每一个元素。
  • odd:用于计数奇数的数量。
  • even:用于计数偶数的数量。
	//二、数据定义 
	int n,m,t,odd=0,even=0;

3.输入数据

  • 通过cin输入二维数组的行数n和列数m。
  • 再通过两层循环输入二维数组的每一个元素。
  • 对于每一个输入的元素t,判断它是奇数还是偶数。
  • 如果t是偶数(t % 2 == 0),则将even计数器加一。
  • 如果t是奇数,则将odd计数器加一。
//三、数据输入 
	cin>>n>>m;
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			cin>>t;
			//四、数据计算
			if(t%2==0){
				++even;
			}else{
				++odd;
			}
		}
	} 

5.输出

  • 输出奇数和偶数的数量,中间用空格隔开。
	//五、输出结果 
	cout<<odd<<" "<<even;

完整代码如下:

#include <bits/stdc++.h> 
using namespace std;

int main() {
    // 问题分析
    // 已知条件:一个 n 行 m 列的二维数组。
    // 求解:统计出这个二维数组中奇数和偶数分别有多少个。
    // 关系:通过遍历数组中的每个元素,统计奇数和偶数的数量。

    // 数据定义
    int n, m, t; // n 表示行数,m 表示列数,t 表示当前读入的数字
    int odd = 0, even = 0; // odd 用于计数奇数的数量,even 用于计数偶数的数量

    // 数据输入
    cin >> n >> m; // 输入二维数组的行数 n 和列数 m
    for (int i = 0; i < n; ++i) { // 遍历每一行
        for (int j = 0; j < m; ++j) { // 遍历每一列
            cin >> t; // 读入当前位置的数字
            // 数据计算
            if (t % 2 == 0) { // 如果是偶数
                ++even; // 偶数计数器加一
            } else { // 如果是奇数
                ++odd; // 奇数计数器加一
            }
        }
    }

    // 输出结果
    cout << odd << " " << even; // 输出奇数和偶数的数量
    return 0; // 程序正常结束
}

三、感谢

如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。

每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2130701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优秀的安防视频监控平台应该具备怎样的视频编解码能力?

随着安防技术的飞速发展&#xff0c;监控平台作为保障公共安全、维护社会秩序的重要工具&#xff0c;其性能与效率日益成为行业关注的焦点。其中&#xff0c;监控平台的视频编码能力在视频监控系统中扮演着至关重要的角色&#xff0c;视频编码技术作为监控系统的核心组成部分&a…

200美元/月的ChatGPT Pro版上线?OpenAI草莓模型曝两周内发布,但模型表现要打个问号?

夕小瑶科技说 原创 作者 | 海野 现在看到“草莓”两个字&#xff0c;我已经条件反射了&#xff0c;已经不再是之前单纯的香香甜甜的草莓了。 一早醒来&#xff0c;又发生了两件“大事”&#xff1a; 一个是OpenAI的草莓&#xff08;strawberry&#xff09;被曝要提前了&#xf…

Xorbits Inference(Xinference):一款性能强大且功能全面的大模型部署与分布式推理框架

大模型部署与分布式推理框架Xinference Xinference的基本使用概述安装启动服务模型部署模型参数配置说明 API接口概述对话接口模型列表嵌入模型Rerank模型使用Xinference SDK使用OpenAI SDK 命令行工具概述启动模型引擎参数其他操作 集成LoRA启动时集成LoRA应用时集成LoRA 部署…

Stable Diffusion绘画 | ControlNet应用-Tile(分块)—tile_resample(分块-重采样)

要想使用 SD 生成高品质图片&#xff0c;放大增加分辨率是必不可少的环节。 tile_resample(分块-重采样) 主要是将图片切分成很多个分块&#xff0c;并识别每个分块的信息&#xff0c;最终通过特定算法把分块的信息重组起来。 能有效避免直接对一整张图片统一处理&#xff0c…

TensorFlow深度学习框架改进K-means聚类、SOM自组织映射算法及上海招生政策影响分析研究...

全文链接&#xff1a;https://tecdat.cn/?p37652 分析师&#xff1a;Chen Zhang 在教育政策研究领域&#xff0c;准确评估政策对不同区域和学生群体的影响至关重要。2021 年上海市出台的《上海市初中学业水平考试实施办法》对招生政策进行了调整&#xff0c;其中名额分配综合…

LSS可视化分析

1 完整 2 去掉plt.imshow(img_show) 3 去掉plt.axis(‘off’) 4 去掉plt.annotate(cams_text[img_id].replace(‘_’, ’ ), (0.01, 0.92), xycoords=‘axes fraction’)

3C电子胶黏剂在手机制造方面有哪些关键的应用

3C电子胶黏剂在手机制造方面有哪些关键的应用 3C电子胶黏剂在手机制造中扮演着至关重要的角色&#xff0c;其应用广泛且细致&#xff0c;覆盖了手机内部组件的多个层面&#xff0c;确保了设备的可靠性和性能。以下是电子胶在手机制造中的关键应用&#xff1a; 手机主板用胶&…

【蓝桥杯省赛真题52】Scratch猪八戒落地 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

scratch猪八戒落地 第十五届青少年蓝桥杯scratch编程省赛真题解析 一、题目要求 编程实现 1&#xff09;点击绿旗&#xff0c;猪八戒在空中踩着一朵云&#xff0c;如图所示; 2&#xff09;1秒后&#xff0c;猪八戒踩着云向地面移动&#xff0c;如图所示; 3&#xff09;猪八…

海外问卷调查有其他方式赚美金吗?

大家好&#xff0c;我是梦蝶问卷&#xff0c;专注于海外问卷调查项目。 大家应该都了解&#xff0c;做海外问卷项目填写问卷能赚美金&#xff0c;那除此之外&#xff0c;还有其它盈利模式吗&#xff1f;答案当然是肯定的。 有创业过的朋友应该都知道&#xff0c;一个项目的每个…

spring项目期间的学习9/11

核心&#xff1a;需要计算具体要求字段出现的数量使用count&#xff0c;需要返回出现字段的数量需要使用AS,需要避免重复需要使用distinct&#xff0c;需要具体体现在8月份需要使用like 代码如下&#xff1a; selectcount(distinct device_id) as did_cnt,count(question_id) …

UDS 诊断 - RequestUpload(请求上传)(0x35)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl&#xff08;诊断会话控制&#xff09;&#xff08;0x10&#xff09;服务 UDS 诊断 - ECUReset&#xff08;ECU重置&#xff09;&#xff08;0x11&#xff09;服务 UDS 诊断 - SecurityA…

一篇文章,讲清SQL的 joins 语法

SQL 中的不同 JOIN 类型&#xff1a; 1. &#xff08;INNER&#xff09;JOIN&#xff08;内连接&#xff09;&#xff1a;返回两个表中具有匹配值的记录。 2. LEFT&#xff08;OUTER&#xff09;JOIN&#xff08;左外连接&#xff09;&#xff1a;返回左表中的所有记录&#…

【SQL】百题计划:SQL内置函数“LENGTH“的使用

【SQL】百题计划-20240912 方法一&#xff1a; Select tweet_id from Tweets where LENGTH(content) > 15;– 方法二&#xff1a; Select tweet_id from Tweets where CHAR_LENGTH(content)> 15;

【DataSophon】Yarn配置历史服务器JobHistory和Spark集成historyServer

目录 一、概述 1.1历史服务器JobHistory 1.2 Spark历史服务器HistoryServer 二、集成配置 一、概述 1.1历史服务器JobHistory 为了查看程序的历史运行情况&#xff0c;需要配置一下历史服务器。方便在xxxx:8088查看历史任务运行日志信息。 1.2 Spark历史服务器HistoryServ…

夜幕降临 Nightfall Comes,官方中文,解压即玩,

游戏截图 《Nightfall Comes》是一款基于俯视角3D动作的Rogue-lite游戏&#xff0c; 讲述了四位角色的故事&#xff0c;他们怀着对已灭亡世界的最后执念&#xff0c;聚集在一个领地上的城堡中。 下载地址&#xff1a; 夜幕降临 Nightfall Comes,官方中文,解压即玩,

老板:IT部门一天到晚都在干什么?

最近某集团公司的一位CIO与笔者闲聊&#xff0c;吐槽道&#xff1a;老板问“IT部门一天到晚都在干什么&#xff1f;你们不就是修修电脑搞搞网络吗&#xff1f;要那么多人干什么&#xff1f;” 这位CIO其实是说出了老板对IT部门的质疑&#xff0c;背后折射的是企业数字化转型过…

安装office后,右键-》新建,不能创建word、PPT、Excel

原因是安装没有选择默认安装 解决办法&#xff1a; 文件的后缀名&#xff1a; 打开注册表&#xff1a; word: Excel&#xff1a; PPT&#xff1a; 最后重启一下电脑 效果&#xff1a;

七大技术 增强轧钢测径仪的抗干扰能力!

轧钢测径仪是在线检测设备&#xff0c;也就意味着其需要直面钢材&#xff0c;这些钢材在生产测量时&#xff0c;大部分温度高&#xff0c;环境中还有水汽、氧化铁皮等干扰测量的因素&#xff0c;因此在对轧钢测径仪设计之初就考虑到了现场的各种情况&#xff0c;提高测径仪的防…

极狐GitLab CI/CD 作业一直处于等待状态,如何解决?

本分分享 GitLab CI/CD Job 不工作的的故障排查方法&#xff1a;当 GitLab Runner 不接受 Job&#xff0c;Job 一直处于等待状态&#xff0c;如何解决此问题。 极狐GitLab 为 GitLab 在中国的发行版&#xff0c;中文版本对中国用户更友好。极狐GitLab 支持一键私有化部署&…

Linux arm-linux-gcc 内核编译

1.下载 arm-linux-gcc 4.4.3版本后更新路径 sudo vim /home/linux/.bashrc 的最后一行加入路径 或者 sudo vim /erc/profile 最后一行加路径 如果使用第一个改&#xff0c;则注释掉第二个的最后一行的旧的arm-linux-gcc 的路径 版本更新好后&#xff0c;使用编译可能还有错误&a…