Количество столкновений за 1 секунду для заданного количества точек С++ [требует правки]

349
17 мая 2017, 08:54

HELP. Без ООП Нужно определить количество столкновений за 1 секунду для заданного количества нульмерных шаров (точек) в одномерном пространстве, с заданными начальными скоростями и начальными положениями.

Answer 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;
}
Answer 2

Для случая, когда точки проскакивают одна сквозь другую, и алгоритма 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 :)

READ ALSO
Sourse files.Двойное определение функций С++

Sourse files.Двойное определение функций С++

По заданию, мне нужно написать Sourse filecpp, и в него записать функции

337
массивы в WebAssembly

массивы в WebAssembly

Как передать массив строк (char [10][10]) из модуля C, оттранслированного в WebAssembly, в модуль javascript и обратно?

281
Как вывести таблицу соответствия?

Как вывести таблицу соответствия?

Как вывести таблицу соответствия градусов по Цельсию градусам по Фаренгейту, так чтобы пределы и шаг вводится пользователем с экранаВ получившейся...

289