Внеземные гости

      Комментарии к записи Внеземные гости отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 4 мес., 3 нед. назад.

  • Автор
    Сообщения
  • #3371

    Условие задачи взято с acmp.ru:

    Недавно на поле фермера Джона были обнаружены следы приземления летающих тарелок. Об этом даже писала газета Mew Yorc Courier.

    Поле фермера Джона имеет форму круга радиусом r1. По сообщениям журналистов были обнаружены два следа от летающих тарелок, имевшие форму кругов. Один из них имел радиус r2, второй — радиус r3. Также сообщается, что они находились внутри поля фермера Джона и не пересекались (при этом, они, возможно, касались друг друга и/или границы поля).

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

    Входной файл INPUT.TXT содержит три целых положительных числа — r1, r2, r3 (1 ≤ r1, r2, r3 ≤ 10^9).

    Выходные данные:
    В выходной файл OUTPUT.TXT выведите слово YES, если информация, опубликованная в газете, может соответствовать правде, и слово NO — иначе.

    Примеры:

    №	INPUT.TXT	OUTPUT.TXT
    1	10 10 10	NO
    2	10 3 4	YES

    Разбор решения задачи

    Поскольку требуется узнать, могла ли в принципе случиться данная ситуация, то при решении данной задачи будем ориентироваться на идеальный случай — когда центры внутренних кругов лежат на одной линии, являющейся диаметром внешнего круга. Если в данном случае условие r2+r3<=r1 не выполняется, тогда можем с уверенностью утверждать, что данное событие невозможно.

    Рис 1. r2+r3

    Рис 2. r2+r3=r1. Событие могло произойти:

    Рис 3. r2+r3>r1. Событие произойти не могло:

    Блок-схема алгоритма решения задачи:

    Исходный код решения на С++:

    #include <stdio.h>
    
    int main() { 
    	FILE *fp1; 
    	FILE *fp2; 
    	int r1,r2,r3; 
    
    	fp1 = fopen("input.txt","r"); 
    	fscanf(fp1,"%d %d %d",&r1, &r2, &r3); 
    
    
    	fp2 = fopen("output.txt","w"); 
    
    	if (r1>=(r2+r3)) { 
    		fprintf(fp2,"YES"); 
    		printf("YES"); 
    	} 
    	else { 
    		fprintf(fp2,"NO"); 
    		printf("NO"); 
    	} 
    	fclose(fp1); 
    	fclose(fp2); 
    	return 0; 
    }

Для ответа в этой теме необходимо авторизоваться.