[C_ST113-易] 水平濾波器
Time Limit: 2 seconds
問題描述 :
請讀入一行由 0~9 組成的字串(長度 £ 100 )以及一個奇數 N ( N ≤ 11 ),接著針對每個字串中的字元 D ,就該字元 D 的前 (N-1)/2 個與後 (N-1)/2 個字元中,取得最大值 M ,接著來將字元 D 替換為最大值的字元 M ,最後輸出替換後的結果。
輸入說明 :
輸入資料只有一行,包含由空白隔開的兩個資料,第一個資料是由 0~9 構成的字串 ( 長度 ≤ 100) ,第二個數字是一個奇數 N ( N ≤ 11 )。
輸出說明 :
輸出問題描述中每個字元替換後的結果。
範例 :
問題描述 :
請讀入一行由 0~9 組成的字串(長度 £ 100 )以及一個奇數 N ( N ≤ 11 ),接著針對每個字串中的字元 D ,就該字元 D 的前 (N-1)/2 個與後 (N-1)/2 個字元中,取得最大值 M ,接著來將字元 D 替換為最大值的字元 M ,最後輸出替換後的結果。
輸入說明 :
輸入資料只有一行,包含由空白隔開的兩個資料,第一個資料是由 0~9 構成的字串 ( 長度 ≤ 100) ,第二個數字是一個奇數 N ( N ≤ 11 )。
輸出說明 :
輸出問題描述中每個字元替換後的結果。
範例 :
輸入範例 | 輸出範例 |
210548022512582201235412 5 | 255888885558888823555554 |
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <vector>
- using namespace std;
- int main() {
- // [C_ST113-易] 水平濾波器
- string str;
- getline(cin, str);
- int count = 0;
- string data;
- int N;
- stringstream ss(str);
- string token;
- //字串切割
- while (getline(ss, token, ' '))
- {
- if(count == 0)
- {
- data = token;
- count++;
- }
- else
- {
- N = stoi(token);
- }
- }
- vector<int> ans;
- for(int i = 0;i < data.size();i++)
- {
- int Max = -1;
- for(int j = i-((N-1)/2);j <= i+((N-1)/2);j++)
- {
- if(j >= 0 && (int)data[j]-48 > Max)
- {
- Max = (int)data[j]-48;
- }
- }
- ans.push_back(Max);
- }
- for(int i = 0;i < ans.size();i++)
- {
- cout << ans[i];
- }
- cout << endl;
- return 0;
- }
沒有留言:
張貼留言