Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Roker++
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
#1

Не могу решить .... - C++

23.11.2009, 17:49. Просмотров 771. Ответов 5
Метки нет (Все метки)

Я некак не могу решыть ...... Вот ети задачи :
Задача №1
Васе на день рождения подарили много шариков и игрушечный лазер.Шарики надуты и раскиданы по комнате. Вася заинтересовался,сколько шариков он собьет, выстрелив в выбранном им направлении (если б еще лазер был настоящий!!!). Луч, проходя через шарик,идет дальше.Размеры Васи считать пренебрежительно малыми,а шарики считать окружностями. Помогите Васе.


Технические условия.
Программа читает с клавиатуры количество шариков n (1<=n<=1000), затем два целых числа dx, dy, не равных одновременно нулю (-1000<=dx,dy<=1000) – координаты точки, через которую пройдет луч лазера. Далее программа читает n троек целых чисел, не превосходящих 1000 по модулю. Каждая тройка – координаты центра и радиус очередного шарика (всегда положительное число). Вася находится в начале координат. Никакие два шарика не имеют общих точек, а Вася не находится внутри шарика. Программа выводит на экран количество пробитых лучом лазера шариков. Если луч касается шарика, такой шарик не считается пробитым.

Пример
Ввод
4 4 3 -4 -4 2 2 1 1 1 7 5 12 9 3
Вывод
2

Задача №2
Компания Megasoft организовала телевикторину. На табло появляется натуральное число. Участник должен дописать к нему справа несколько цифр (обязательно хотя бы одну) так,чтобы получилось простое число и прислать SMS с полученным числом в студию. Участник, приславший свое число первым, эту сумму и выигрывает. Владелец компании Megasoft Гилл Бейтс известен своей жадностью и не хочет платить лишние деньги. Поэтому он решил негласно изменить правила. Теперь выигрыш получит тот участник викторины, который первым пришлет наименьшее возможное число. Помогите Г.Бейтсу определить сумму выигрыша согласно новым правилам.

Технические условия.
Программа читает с клавиатуры натуральное число, не большее 1000000. Программа выводит на экран минимальное число, которое можно получить по новим правилам викторины,то есть сумму, с которой Г.Бейтс вынужден распрощаться.
Примеры
Ввод
12
Вывод
127
Ввод
41
Вывод
419

Задача №3
Как известно, касательной к окружности является прямая, которая имеет ровно одну общую точку с этой окружностью. Возможна ситуация, когда одна и та же прямая является касательной сразу к двум окружностям. Тогда она называется общей касательной. Напишите программу, которая будет находить количество разных общих касательных для заданных двух окружностей. При выводе учтите древнюю традицию приписывать числу 7 значение «много». То есть, когда количество общих касательных будет строго большим 6, независимо от истинного количества выводите 7.


Технические условия. Программа читает с клавиатуры шесть целых чисел (каждое не больше по модулю миллиона) через пробел X1,Y1,R1,X2,Y2,R2 - соответственно координаты центра и радиусы 1-го и 2-го круга. Программа выводит на экран искомое число (с учетом упомянутой древней традиции).
Пример
Ввод 20 0 4 50 0 10
Вывод 4

Кто может помогите пожалуйсто !!!! Зарание Спаибо .!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2009, 17:49     Не могу решить ....
Посмотрите здесь:

C++ Не могу решить
C++ Вот не могу решить !!!
не могу решить до конца C++
Телефонный справочник. Не могу решить C++
C++ Не могу решить на C++
не могу решить функцию C++
не могу решить через функцию. C++
Простое, но решить не могу C++
не могу решить zadachu в С++ C++
Не могу решить циклы и массивы C++
Домашка по С/С++. Не могу решить! C++
C++ Не могу решить! C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
23.11.2009, 18:47     Не могу решить .... #2
Ето какой курс ?
TanT
эволюционирую потихоньку
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
23.11.2009, 19:06     Не могу решить .... #3
какое-то дежавю меня посетило... ну да ладно
вот что придумалось по первой задачи, точнее чего там думать,
есть координаты трёх точек начало координат (0,0) - Вася,
dx, dy - координаты точки, через которую пройдет луч лазера, и центр любой окружности

1. вычисляем угол между прямыми из начала координат (например теорема косинусов)
2. далее внимательно: прямоугольный треугольник все представляют? так вот представьте себе такой треугольник, прямой угол у которого образован перпендикуляром, опущенным из центра окружности на линию лазера. и на этот перпендикуляр смотрит угол - а, который мы вычислили в п.1
3. все помнят что sin(a)=перпендикуляр/гипотенузу, отсюда находим величину перпендикуляра
если длина перпендикуляра меньше радиуса шара, то лазер проходит через шар, иначе нет

вот это как бы теория
Roker++
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
23.11.2009, 19:24  [ТС]     Не могу решить .... #4
Цитата Сообщение от Sekt Посмотреть сообщение
Ето какой курс ?
Ето курс 10 класа .....

Добавлено через 1 минуту
Цитата Сообщение от TanT Посмотреть сообщение
какое-то дежавю меня посетило... ну да ладно
вот что придумалось по первой задачи, точнее чего там думать,
есть координаты трёх точек начало координат (0,0) - Вася,
dx, dy - координаты точки, через которую пройдет луч лазера, и центр любой окружности

1. вычисляем угол между прямыми из начала координат (например теорема косинусов)
2. далее внимательно: прямоугольный треугольник все представляют? так вот представьте себе такой треугольник, прямой угол у которого образован перпендикуляром, опущенным из центра окружности на линию лазера. и на этот перпендикуляр смотрит угол - а, который мы вычислили в п.1
3. все помнят что sin(a)=перпендикуляр/гипотенузу, отсюда находим величину перпендикуляра
если длина перпендикуляра меньше радиуса шара, то лазер проходит через шар, иначе нет

вот это как бы теория
За теорию спасибо , но меня интересует реалезацыя ....... Буду премного блогадарен , есле кто напишет код !!! Спасибо ...
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
23.11.2009, 23:00     Не могу решить .... #5
меня интересует реалезацыя
Ну так напиши реализацию - какие трудности ?

Добавлено через 16 минут
По поводу первой задачи - у меня другая идея.
Пусть (dx,dy) - точка L, через которую проходит лазер.
Находим угол наклона (lambda) прямой OL относительно координатной сетки.
sin(lambda)=y/sqrt(dx^2+dy^2)

Пусть (x,y) - это точка А - центр окружности радиуса r.
Находим угол наклона (alpha) прямой OA относительно координатной сетки.
sin(alpha)= y/sqrt(x^2+y^2).

Строим две касательных к окружности. Находим угол gamma между OA и любой касательной.
Для этого строим прямоугольный треугольник OAB. Где OA перпендукулярно AB. B - это точка на окружности. sin(gamma)=AB/OB.
AB=r - радиус окружности.
OB=sqrt(r^2+OA^2)=sqrt(r^2+x^2+y^2)
sin(gamma)=r/(r^2+x^2+y^2)

Лазер попадет в шар, если fabs(alpha-lambda)<gamma

Добавлено через 3 минуты
В задаче 2 нужно перебирать варианты пока не будет найдено простое число.
Пусть загадано число ABC.
Варианты c 1 цифрой: ABC0, ABC1, ..., ABC9.
Варианты с 2 цифрами: ABC00, ABC01, ..., ABC99.
И так далее.

Добавлено через 7 минут
В задаче 3 если окружности не пересекаются и не лежат друг в друге и не касаются друг друга, тогда касательных будет 4 штуки.

Если окружности касаются и не лежат друг в друге, тогда касательных будет 3 штуки.

Если окружности касаются и одна лежит в другой, тогда касательная будет 1 штука.

Если окружности совпадают, тогда касательных будет 7 штук ( МНОГО ).

Если окружности пересекаются (не совпадают), тогда касательных будет 2 штуки.

Еще вариант когда окружность лежит в другой, но они не касаются и не пересекаются. Тогда касательных будет 0 штук.
Steavy
Сообщений: n/a
29.11.2009, 00:26     Не могу решить .... #6
задача 2

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
26
27
28
29
30
#include <iostream>
#include <cmath>
using namespace std;
int main(){
    cout<<"Input value=";
    unsigned int start_value,simple_value,i,k,temp,j,counter;
    cin>>start_value;
    temp=start_value;
    for(k=1;k<200;k++){
                     start_value=temp;
                     start_value=start_value*(pow(10,k));
                     for(i=0;i<=9;i++){
                                       
                                       start_value++;
                                       counter=2;
                                       for(j=2;j<start_value;j++){                                                                   
                                                                  if(start_value%j!=0) counter+=1;
                                                                   }
                                       if (counter==start_value) break;
                                       }
                     if (counter==start_value) {
                                                  simple_value=start_value;
                                                  break;
                                                  }
                     }
    cout<<endl<<"simple_value="<<simple_value;
    cout<<endl<<"Gill Baits you've lost "<<simple_value<<" dollars";
    cin>>start_value;
    return 0;
}
Yandex
Объявления
29.11.2009, 00:26     Не могу решить ....
Ответ Создать тему
Опции темы

Текущее время: 22:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru