HELP. Без ООП Нужно определить количество столкновений за 1 секунду для заданного количества нульмерных шаров (точек) в одномерном пространстве, с заданными начальными скоростями и начальными положениями.
ВАЖНО!!! Больше таких вопросов не задавайте, покажите хоть минимальные усилия, код напишите, или по крайней мере алгоритм
Я думаю, что алгоритм таков. пускай у нас есть время, начальная скорость и начальное положение,и количество точек. Так как, пространство одномерное,--> все происходит на числовой прямой.
проще всего задать ето все структурой.
#include <iostream>
using namespace std;
struct Tochka
{
int polojenie;
int skorost;
};
Tochka base[100];
int main()
{
int time;
cin>>time;
int kolichestvo;
cin>>kolichestvo;
int Udari=0;
for(int k=0;k<kolichestvo;k++)
{
for(int i=0;i<time;i++)
{
cout<<"\npolojenie:";
cin>>base[i].polojenie;
cout<<"\nskorost:";
cin>>base[i].skorost;
for (int i=0;i<time;i++)
{
for(int j=0;j<time;j++)
{
if(base[i].polojenie==base[j].polojenie)
Udari+=1;
}
}
}
}
cout<<"kol udarov"<<Udari<<endl;
}
Для случая, когда точки проскакивают одна сквозь другую, и алгоритма O(N^2).
Если начальные положения точек x_i
, скорости v_i
(естественно, со знаком), то конечные положения x_ti = x_i + v_i*t
. Сталкивались за время от 0
до t
точки i
и j
, если (x_i - x_j)*(x_ti - x_tj) <= 0
...
Так что
double x[N] = { ... };
double v[N] = { ... };
double t = ...;
int collisions = 0;
for(int i = 0; i < N; ++i)
for(int j = i+1; j < N; ++j)
{
if ((x[i]-x[j])*(x[i]+v[i]*t-x[j]-v[j]*t) <= 0) ++collisions;
}
Собственно, все. Если интересует одна первая секунда :) Если нет - обновить положения точек и повторить. Чем дальше, тем соударений будет меньше - точки постепенно выстроятся в разбегающиеся и расширяющиеся линии.
Задача с реальными столкновениями (с изменением скоростей в момент столкновения) куда интереснее и сложнее. Правда, в конечном итоге столкновения тоже прекратятся :)
Да, и еще - нужно тэг поменять - это уже не C++, а просто C :)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
По заданию, мне нужно написать Sourse filecpp, и в него записать функции
Как передать массив строк (char [10][10]) из модуля C, оттранслированного в WebAssembly, в модуль javascript и обратно?
Как вывести таблицу соответствия градусов по Цельсию градусам по Фаренгейту, так чтобы пределы и шаг вводится пользователем с экранаВ получившейся...