Задача
Тесты
Ввод
|
Вывод |
1 2 3 4 5 6 7 8 9 10 | 1 6 2 7 3 8 4 9 5 10 |
8 25 3 7 | 8 3 25 7 |
5.5 6.025 2.387 1.0986 7.762 3.5958 | 5.5 1.0986 6.025 7.762 2.387 3.5958 |
Хороший код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include <vector> using namespace std; int main() { vector <double> s; vector <double> l; double a,n; while(cin>>a) { s.push_back(a); } n=s.size()/2; for(int i=0;i<n;i++) { l.push_back(s.at(i)); l.push_back(s.at(i+n)); } for(int i=0;i<l.size();i++) { cout<<l.at(i)<<" "; } return 0; } |
Решение
Считываем действительные числа в первый вектор и узнаем [latex]n[/latex]. Затем поочередно вписываем элементы и элементы с измененным индексом в другой вектор, пока счетчик не будет равен [latex]n[/latex] и выводим полученный вектор, он и будет ответом.
Лучший код на C++
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 |
#include <iostream> #include <vector> using namespace std; int main() { vector <double> s; double a,n; int b=0; while(cin>>a) { s.push_back(a); } n=s.size()/2; for(int i=0;i<n;i++) { s.insert(s.begin()+2*i+1,s.at(n+b+i)); b++; } s.resize(2*n); for(int i=0;i<s.size();i++) { cout<<s.at(i)<<" "; } return 0; } |
Лучший код на Java
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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); Vector a = new Vector(); while(in.hasNextDouble()){ a.add(in.nextDouble()); } int n=a.size()/2; int b=0; for(int i=0;i<n;i++){ a.add(2*i+1,a.get(n+b+i)); b++; } a.setSize(2*n); Double[] s = new Double[a.size()]; a.toArray(s); for(int i=0;i<s.length;i++){ System.out.print(s[i]+" "); } } } |
Решение
В первом способе мы задавали два вектора, чем естественно увеличивали занимаемую память. C помощью функции insert() мы можем вставлять элементы в вектор, не используя дополнительных средств. Однако мы сталкиваемся с тем, что функция по определению вставляет в вектор константу из-за чего наш цикл не будет правильно работать. Чтобы изменять параметр вводимого элемента, заводим отдельный счетчик. Теперь каждый [latex]2*i+1[/latex]-ый шаг мы вставляем [latex]n+b+i[/latex]-ый элемент вектора. Проведем resize() вектора чтобы убрать лишние элементы и получим готовый результат.
Ссылки
- Хорошее решение на C++
- Лучшее решение на C++
- Лучшее решение на Java
- Условие в задачнике Абрамова(стр.120)
Для отправки комментария необходимо войти на сайт.