PTA 图像过滤(c++)

本文介绍了一种图像过滤算法,该算法通过替换指定灰度值区间的像素颜色来凸显图像的重要部分。文章详细解释了算法的输入输出格式,并提供了一个具体的样例解答,包括代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1066 图像过滤 (15分)

图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。

输入格式:

输入在第一行给出一幅图像的分辨率,即两个正整数 M 和 N(0<M,N≤500),另外是待过滤的灰度值区间端点 A 和 B(0≤A<B≤255)、以及指定的替换灰度值。随后 M 行,每行给出 N 个像素点的灰度值,其间以空格分隔。所有灰度值都在 [0, 255] 区间内。

输出格式:

输出按要求过滤后的图像。即输出 M 行,每行 N 个像素灰度值,每个灰度值占 3 位(例如黑色要显示为 000),其间以一个空格分隔。行首尾不得有多余空格。

输入样例:

5 100 150 0
3 189 254 101 119
150 233 151 99 100
88 123 149 0 255

输出样例:

003 189 254 000 000
000 233 151 099 000
088 000 000 000 255

样例解答:

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

int main() {
 int m,n,a,b,k,temp;
 cin>>m>>n>>a>>b>>k;
 int color[m][n]={0};
 for(int i=0;i<m;i++){
  for(int j=0;j<n;j++){
   cin>>temp;
   if(temp<=b&&temp>=a){
    temp=k;
   }
   color[i][j]=temp;
  }
 }
 for(int i=0;i<m;i++){
  for(int j=0;j<n;j++){
   if(j!=0) cout<<" ";
   printf("%03d",color[i][j]);
  }
        cout<<endl;
 }
}
int main() {
 int m,n,a,b,k,temp;
 cin>>m>>n>>a>>b>>k;
 int color[m][n]={0};
 for(int i=0;i<m;i++){
  for(int j=0;j<n;j++){
   cin>>temp;
   if(temp<=b&&temp>=a){
    temp=k;
   }
   color[i][j]=temp;
  }
 }
 for(int i=0;i<m;i++){
  for(int j=0;j<n;j++){
   if(j!=0) cout<<" ";
   printf("%03d",color[i][j]);
  }
        cout<<endl;
 }
}
### PTA乙级1089 C++解题思路及代码实现 PTA乙级1089题目要求计算两个整数之间的所有奇数之和。以下是详细的解题思路以及完整的C++代码实现。 #### 解题思路 1. 题目给定两个整数`m`和`n`,需要求出这两个整数之间(包括两端点)所有的奇数之和。 2. 判断一个数是否为奇数的方法是通过取模运算判断其能否被2整除:如果`num % 2 != 0`,则该数为奇数[^6]。 3. 使用循环遍历从`m`到`n`的所有整数,并逐一检查它们是否为奇数。如果是,则将其累加至总和变量中。 4. 特殊情况处理:当`m > n`时,交换两者的值以确保从小到大进行遍历;或者可以直接逆向遍历,无需交换数值。 5. 输出最终的结果即可。 #### 完整代码实现 以下是一个基于上述逻辑编写的完整C++程序: ```cpp #include <iostream> using namespace std; int main() { int m, n; cin >> m >> n; // 输入两个整数 long long sum = 0; // 初始化结果变量为0,使用long long防止溢出 if (m <= n) { // 正常顺序遍历 for (int i = m; i <= n; ++i) { if (i % 2 != 0) { // 如果当前数字是奇数 sum += i; // 累加到sum中 } } } else { // 反序遍历时的情况 for (int i = m; i >= n; --i) { if (i % 2 != 0) { // 如果当前数字是奇数 sum += i; // 累加到sum中 } } } cout << sum << endl; // 输出结果 return 0; } ``` 此代码能够正确处理任意大小关系的输入数据范围内的奇数相加操作[^7]。 #### 注意事项 - **边界条件**:需注意当`m=n`且两者均为奇数时应返回本身作为唯一项参与求和。 - **性能优化**:虽然本题规模较小不需要特别考虑效率问题,但在实际应用中可以通过减少不必要的迭代次数来提升运行速度,例如直接跳过偶数只访问可能成为候选者的位置等方法进一步简化算法结构[^8]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值