Розв’язок задачі з Абрамова №366.2
Лис 04

Всі умови | Умова: Дано символи a1, ..., a10, натуральне число n, символи s1, ..., sn. Як і в попередній задачі, будемо розглядати слова, що входять до послідовності s1, ..., sn, як і раніше вважаючи, що кількість символів в кожному слові не більше 15. будемо також вважати, що серед символів a1, ..., a10 немає пробілів, і тому послідовність a1, ..., a10 можна розглядатися як одне слово. У словах можуть зустрітися помилка - замінена одна літера. Потрібно знайти в s1, ..., sn всі слова, з яких могло б вийти a1, ..., a10 в результаті однієї помилки. (С.А. Абрамов, Г.Г. Гнездилова,Е.Н. Капустина, М.И. Селюн. Задачи по программированию. - Вологда, 2000. - №366)
Розв'язок на С++
#include <stdio.h> #include <iostream> #include <cmath> using namespace std; int main() { int n; char a[10]; cout << "n = "; cin >> n; cout << "a = "; cin >> a; char s[n]; cout << "s = "; cin >> s; int si, ai = 0; int start = 0; int mistakes = 0; for(si = 0; si < n ; si++){ if (s[si] == ' '){ if (ai == 10 && mistakes < 2){ int i; for(i = 0; i < ai; i++){ cout << s[start + i]; } cout << endl; } ai = 0; start = si + 1; mistakes = 0; continue; } if (ai >= 10 || s[si] != a[ai]){ mistakes++; } ai++; } return 0; }