Задача. «Исправление ошибок». Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательностей нулей и единиц (или, аналагично, точек и тире). Из-за помех, возможен ошибочный прием некоторых сигналов: нуль может быть воспринят как единица и наоборот. Можно передавать каждый сигнал трижды, заменяя, например, последовательность 1, 0, 1 последовательностью 1, 1, 1, 0, 0, 0, 1, 1, 1. Три последовательные цифры при расшифровке заменяются той цифрой, которая встречается среди них по крайне мере дважды. Такое утраивание сигналов существенно повышает вероятность правильного приема сообщения. Написать программу расшифровки.
1 0 1 0 0 1 1 1 0 | 1 0 1 |
0 0 0 1 1 1 0 0 0 | 0 1 0 |
0 1 0 1 0 1 0 1 0 1 0 1 | 0 1 0 1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include<iostream> #include<vector> using namespace std; int main() { int n; vector<int> m; int k=0; while(cin>>n) { m.push_back(n); k++; } int p=k/3; for(int j=0;j<p;j++) { int a=0; for(int i=0;i<3;i++) { if(m[i]==1)a++; } m.erase(m.begin(),m.begin()+3); if(a==0||a==1) cout<<"0"; if(a==2||a==3) cout<<"1"; } return 0; } |
Код программы можно посмотреть тут