«ДЗ»: Посчитать сумму покупки двух товаров. W Пример: Введите кол-во булок хлеба: 4 Введите цену одной булки хлеба: 30 Введите кол-во бутылок молока: 2 Введите цену одной бутылки молока: 60 За 46 хлеба и 26 молока вы заплатите 240 руб.
Ну тут совсем всё просто: Смотрим на входные данные, исходное слово "апельсин", а зашифрованное "твчюодыа". Вспоминаем принцип шифра "Цезаря", что бы зашифровать текст, необходимо определить сдвиг по алфавиту, так называемый "корень". То есть, если корень равен 3, то все буквы А в исходном послании заменятся на (сдвигаемся по алфавиту на 3 буквы вправо) букву Г. Но что делать если мы шифруем букву Ю? Считаем сдвиг Ю - Я это 1, а дальше просто "прыгаем" в начало алфавита Я - А это 2, А - Б это 3, следовательно при ключе 3 буква Ю станет буквой Б. В нашем случаи все что нужно, так это проверить, на сколько букв сместилась буква "а", в слове "апельсин", что превратилась в букву "т", в слове "твчюодыа". Смотрим по даному алфавиту и считаем количество сдвигов, это будет 19. Теперь провевим, что если сдвинуть остальные буквы в слове апельсин на 19 символов вправо по алфавиту, если они будут соответствовать зашифрованым, то мы нашли корень правильно. В нашем случаи именно так и есть, то есть ответ задачи ключь = 19.
// PascalABC.NET 3.0, сборка 1073 const sb='bcdfgjklmnpqrstvwxz'; s='Computer programming is a process of computer programs creation'; var i,n:integer; s1,sn,t:string; begin i:=1; while s[i]<>' ' do Inc(i); s1:=Copy(s,1,i-1); n:=Length(s); i:=n; while s[i]<>' ' do Dec(i); sn:=Copy(s,i+1,n-i); t:=''; for i:=1 to Length(s1) do if Pos(s1[i],sb)>0 then t:=t+s1[i]; s1:=t; t:=''; for i:=1 to Length(sn) do if Pos(sn[i],sb)>0 then t:=t+sn[i]; sn:=t; t:=''; for i:=1 to Length(s1) do if Pos(s1[i],sn)>0 then if Pos(s1[i],t)=0 then t:=t+s1[i]; for i:=1 to Length(t) do Write(t[i],' '); Writeln end.
Тестовый прогон: t r
2. "Нормальное" решение
// PascalABC.NET 3.0, сборка 1073 const sb='bcdfgjklmnpqrstvwxz'; s='Computer programming is a process of computer programs creation'; begin var a:=s.ToWords(' '); a[0].Intersect(a[a.Length-1]).Where(x->Pos(x,sb)>0).Println(',') end.
Тестовый прогон: t,r
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку