C++题库

图形相似度
描述
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。
说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。
两幅图像的相似度定义为相同像素点数占总像素点数的百分比。
输入
第一行包含两个整数m和n,表示图像的行数和列数,中间用单个空格隔开。
1 <= m <= 100, 1 <= n <= 100。
之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色。相邻两个数之
间用单个空格隔开。
之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之
间用单个空格隔开。
输出
一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。
代码
青少年编程
V 13201376357 矩阵边缘之和
描述
输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是
第一行和最后一行的元素以及第一列和最后一列的元素。
输入
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格
分开。
接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。
输出
输出对应矩阵的边缘元素和
代码
#include<iostream>
#include<string.h>
using namespace std;
int a[100][100];
int main()
{
	int n,m;
	cin>>n>>m;
	int sum = 0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
			if(i==0||j==0||i==(m-1)||j==(n-1))
			{
				sum+=a[i][j];
			}
		}
	}
	cout<<sum<<endl;
	return 0;
}

青少年编程
V 13201376357 青少年编程
V 13201376357
最好的草
这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,
一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。
输入
第一行包含两个整数R和C,中间用单个空格隔开。
接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1
<= R, C <= 100 )
输出
输出一个整数,表示草丛数。
. # . . . .
. . # . . .
. . # . . #
. . . # # .
. # . . . .
描述
奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。
它想计算一下牧场中的草丛数量。
在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。
给定牧场地图,计算有多少个草丛。
例如,考虑如下5行6列的牧场地图
代码
#include <iostream>
using namespace std;
int main()
{
	int R, C, x=0; 
	int i, j, k; 
	int dx[4]={0,1,-1,0}; 
	int dy[4]={1,0,0,-1};
	char a[102][102]={0};
	cin >> R >> C;
	for (i=1; i<=R; i++)
		for (j=1; j<=C; j++)
			cin >> a[i][j];
	for (i=1; i<=R; i++)
		for (j=1; j<=C; j++){
			if (a[i][j] == '#'){
				x++;
				a[i][j] = '.';
				for (k=0; k<4; k++){
					if (a[i+dx[k]][j+dy[k]] == '#')
						a[i+dx[k]][j+dy[k]] = '.';
				}
			}
		}
	cout << x << endl;
	return 0;
}

图像模糊处理
描述
给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1. 四周最外侧的像素点灰度值不变;
2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
输入
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之
间。
输出
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
青少年编程
V 13201376357 扫雷
描述
扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里
是否是地雷。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。
输入
第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n
<= 100, 1 <= m <= 100。
接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相
应格子中无地雷。字符之间无任何分隔符。
输出
n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’
表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。
青少年编程
V 13201376357 输出杨辉三角的前N行
题目描述
输出杨辉三角的前N行(N<10)。
输入
输入只有一行,包括1个整数N。(N<10)
输出
输出只有N行.
样例
输入复制
5
输出复制
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
青少年编程
V 13201376357 青少年编程
V 13201376357
孤独的偶数
题目描述
在一个 n 行 m 列的矩阵王国中,生活着一些整数,其中一些是偶数,一些不是偶数。如果一个偶数的
上下左右、左上、右上、左下、右下相邻的数中都没有素数,我们就认为这是一个孤独的偶数。
输入
第 1 行有 2 个整数 n 和 m ,代表矩阵的大(3≤n,m≤50)。
接下来 n 行,每行有 m 个整数(这些整数是 1 1000 之间的整数,含 1
和 1000 )
输出
输出 1 个整数,代表矩阵中孤独偶数的个数。
输入样例
3 5
3 9 10 9 5
1 10 3 4 13
8 3 9 6 3
输出样例
1 青少年编程
​​​​​​​
V 13201376357
是否相邻
题目描述
同学们在操场上排成了一个 n 行 m 列的队形,假设这个队形中所有人年龄都不同,那么给定 2 个年龄后,
请你编程判断,这 2 个年龄对应的同学是否相邻?
相邻的定义是:如果两个同学在上下左右的位置是挨在一起的,那么就算是相邻的。
比如:如下是一个 3 行 4 列的队形,这个队形中每个数字代表了每个同学的年龄。
那么这个队形中
年龄 6 和年龄 10 两个值就是相邻的
输入
第 1 行有 2 个整数 n 和 m ,分别代表队形的行和列的值( 2≤n,m≤200)
接下来 n 行,每行有 m 个整数,代表每个同学的年龄(每个同学的年龄的值在 1 100 之间)
最后一行输入 2 个整数,代表 2 个不同年龄的值。
输出
如果两个年龄的值是相邻的,请输出字符 `Y` ,否则请输出字符 `N` 矩阵加法
描述
输入两个n行m列的矩阵A和B,输出它们的和A+B。
输入
第一行包含两个整数n和m,表示矩阵的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示矩阵A的元素。
接下来n行,每行m个整数,表示矩阵B的元素。
相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。
输出
n行,每行m个整数,表示矩阵加法的结果。相邻两个整数之间用单个空格隔开。
青少年编程
V 13201376357
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以先遍历整个矩阵,记录每最高的巨人和每最矮的巨人的身高。然后再次遍历矩阵,找出同时满足在其所在身高最高且在其所在身高最矮的巨人,即为所有“最矮的巨人”。 具体实现可以用两个数组分别记录每最高巨人和每最矮巨人的身高,然后再次遍历矩阵,找出同时满足条件的巨人即可。代码如下: ``` int n; // 矩阵大小 int a[MAXN][MAXN]; // 矩阵 int row_max[MAXN], col_min[MAXN]; // 记录每最高和每最矮的身高 // 找出所有最矮的巨人 vector<pair<int, int>> find_shortest_giants() { vector<pair<int, int>> res; // 存储结果 // 遍历矩阵,记录每最高和每最矮的身高 for (int i = ; i < n; i++) { row_max[i] = -1; col_min[i] = INF; for (int j = ; j < n; j++) { row_max[i] = max(row_max[i], a[i][j]); col_min[j] = min(col_min[j], a[i][j]); } } // 再次遍历矩阵,找出所有最矮的巨人 for (int i = ; i < n; i++) { for (int j = ; j < n; j++) { if (a[i][j] == row_max[i] && a[i][j] == col_min[j]) { res.push_back(make_pair(i, j)); } } } return res; } ``` ### 回答2: 首先我们需要建立一个n x n的矩阵记录每个巨人的身高,同时定义两个n维数组,分别表示每一的最高身高和每一的最矮身高。在矩阵遍历每个巨人,如果其身高大于其所在的最高身高,更新该的最高身高记录,如果其身高小于其所在的最矮身高,更新该的最矮身高记录。 接下来再遍历一遍矩阵,判断每个巨人是否满足其所在身高最高,以及其所在身高最矮,若满足则将其记录为最矮的巨人之一,输出其坐标即可。 以下为算法的伪代码: n = 矩阵大小 matrix = 储存巨人身高的n x n矩阵 max_rows = 包含每一最高身高的n维数组 min_cols = 包含每一最矮身高的n维数组 shortest_giants = [] for i = 1 to n: max_rows[i] = 0 # 初始化每最高身高为0 min_cols[i] = float('inf') # 初始化每最矮身高为正无穷 for i = 1 to n: for j = 1 to n: height = matrix[i][j] if height > max_rows[i]: max_rows[i] = height if height < min_cols[j]: min_cols[j] = height for i = 1 to n: for j = 1 to n: height = matrix[i][j] if height == max_rows[i] and height == min_cols[j]: shortest_giants.append((i,j)) print(shortest_giants) ### 回答3: 题目描述 操场上有n×n个“巨人”按nn的矩阵形式队,编程找出该方阵所有“最矮的巨人”。 所谓“最矮的巨人”是指,该巨人在其所在,身高最高(没人比其更高);且在其所在,身高最矮(没人比其更矮)。 解题思路 1.找每最大值,最小值,和每最大值的数。 2.对于每最大值,判断其是否在其所在最小值。 3.如果是,则该点为该最小值,该最小值的个数加一。 4.最后遍历整个矩阵,找到每个既是最大值又是最小值的点,输出其坐标。 解题代码 # -*- coding: utf-8 -*- """ Created on Thu May 23 12:03:57 2019 @author: Administrator """ import numpy as np n = 5 a = np.random.randint(0,10,(n,n)) print(a) #用于储存每最大值 row_max = np.zeros(n) #用于储存每最小值 row_min = np.zeros(n) #用于储存每最大值出现的 row_max_col = np.zeros(n) #用于储存每最小值的数量 col_min_count = np.zeros(n) #遍历每 for i in range(n): #每最小值初始化为第一个数 row_min[i] = a[i][0] #遍历每 for j in range(n): #含有每最大值的数 if row_max[i] < a[i][j]: row_max[i] = a[i][j] row_max_col[i] = j #每最小值 if row_min[i] > a[i][j]: row_min[i] = a[i][j] #如果每最大值在其所在最小值,则该点为该最小值 if a[i][int(row_max_col[i])] == np.min(a[:,row_max_col[i]]): col_min_count[int(row_max_col[i])] += 1 for i in range(n): for j in range(n): if a[i][j] == row_max[i] and a[i][j] == row_min[j] and col_min_count[j]==1: print("最矮巨人的坐标为:({},{})".format(i,j)) 运结果 [[9 2 7 0 2] [4 9 5 2 6] [6 8 5 4 3] [0 5 7 6 7] [3 7 4 9 7]] 最矮巨人的坐标为:(1,3) 最矮巨人的坐标为:(2,4) 最矮巨人的坐标为:(4,2)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值