C++作业

图形相似度、

描述给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入第一行包含两个整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 <= m <= 100, 1 <= n <= 100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。输出一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[100][100];
    int b[100][100];
    int n,m;
    cin>>n>>m;
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            cin>>a[i][j];
        }
    }
    int cnt = 0;
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            if(a[i][j] == b[i]b[j]) cnt++;
        }
    }
    cout<<fixed<<setprecision(2)<<1.0*cnt/(n*m)<<endl;
    return 0;
}

矩阵边缘之和

描述输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

输入第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。输出输出对应矩阵的边缘元素和

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[100][100];
    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==n-1 || j==m-1)
            {
                sum = sum + a[i][j];
            }
        }
    }
    cout<<sum;


    
    return 0;
}

最好的草

这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。

输入第一行包含两个整数R和C,中间用单个空格隔开。接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1<= R, C <= 100 )输出输出一个整数,表示草丛数。.

# . . . ..

. # . . ..

. # . . #.

. . # # ..

# . . . .描述奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。例如,考虑如下5行6列的牧场地图

#include<iostream>
#include<iomanip>
using namespace std;
char a[100][100];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    int cnt = 0;
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            if(a[i][j]=='#')
            {
                cnt++;
                a[i-1][j] = '.';
                a[i+1][j] = '.';
                a[i][j-1] = '.';
                a[i][j+1] = '.';
            }
        }
    }
    cout<<cnt;
    return 0;
}

图像模糊处理

描述给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:1. 四周最外侧的像素点灰度值不变;2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。

输入第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。输出n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[100][100]={0};
    int b[100][100]={0};
    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==n-1 || j==m-1) b[i][j] = a[i][j];
        }
    }
    for(int i = 1;i<n-1;i++)
    {
        for(int j = 1;j<m-1;j++)
        {
            b[i][j] = (a[i][j] + a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0+0.5;
        }
    }
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            cout<<b[i][j]<<" ";
        }
        cout<<endl;
    }
    
    return 0;
}

扫雷

描述扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。

输入第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n<= 100, 1 <= m <= 100。接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。输出n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。

输出杨辉三角的前N行

题目描述输出杨辉三角的前N行(N<10)。

输入输入只有一行,包括1个整数N。(N<10)输出输出只有N行.样例输入复制 5输出复制 11 11 2 11 3 3 11 4 6 4 1

孤独的偶数题目

描述在一个 n 行 m 列的矩阵王国中,生活着一些整数,其中一些是偶数,一些不是偶数。如果一个偶数的上下左右、左上、右上、左下、右下相邻的数中都没有素数,我们就认为这是一个孤独的偶数。

输入第 1 行有 2 个整数 n 和 m ,代表矩阵的大(3≤n,m≤50)。接下来 n 行,每行有 m 个整数(这些整数是 1∼1000 之间的整数,含 1和 1000 )输出输出 1 个整数,代表矩阵中孤独偶数的个数。

是否相邻题目

描述同学们在操场上排成了一个 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个整数,表示矩阵加法的结果。相邻两个整数之间用单个空格隔开。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用提供的信息,可以得知该算法使用C++实现。以下是该算法的主要步骤和代码框架: 1. 初始化种群 2. 计算适应度函数 3. 选择操作 4. 交叉操作 5. 变异操作 6. 更新种群 7. 判断是否满足终止条件 以下是该算法C++代码框架: ``` // 定义染色体结构体 struct Chromosome { // ... }; // 初始化种群 void initPopulation(vector<Chromosome>& population) { // ... } // 计算适应度函数 void calculateFitness(vector<Chromosome>& population) { // ... } // 选择操作 void selection(vector<Chromosome>& population) { // ... } // 交叉操作 void crossover(vector<Chromosome>& population) { // ... } // 变异操作 void mutation(vector<Chromosome>& population) { // ... } // 更新种群 void updatePopulation(vector<Chromosome>& population) { // ... } // 判断是否满足终止条件 bool isTerminated(int generation) { // ... } // 遗传算法主函数 void geneticAlgorithm() { // 初始化种群 vector<Chromosome> population; initPopulation(population); // 迭代直到满足终止条件 int generation = 0; while (!isTerminated(generation)) { // 计算适应度函数 calculateFitness(population); // 选择操作 selection(population); // 交叉操作 crossover(population); // 变异操作 mutation(population); // 更新种群 updatePopulation(population); // 更新迭代次数 generation++; } } ``` 需要注意的是,以上代码框架只是一个简单的示例,实际的代码实现可能会更加复杂。如果您需要更详细的代码实现,请参考引用中提供的C++代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值