Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2010, 19:42   #1
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию Промежутки

На вход подается интервал, полуинтервал или отрезок.
( (x, y) or [x, y) or (x, y] or [x, y] )
Где х представлено как a/b, у как c/d. a, c -целые, b, d - положительные.
Если b и (или) d ==1 то записывается просто a и (или ) c.
Промежуток задается так: открывается квадратная или круглая скобка, далее записано число x в формате a/b или a, затем запятая и пробе, затем число y в таком же формате, после закрывается скобка, перевод строки и конец файла. Abs(a) abs(c)<=10^9. 0<d, b<=10^9
Найти количество целых чисел в промежутке.
На входе [3/2, 4) на выходе 2
На входе [-2, 4/3] на выходе 4

Помогите плз понять как сделать, что то даже не пойму как организовать анализ ввода.
boomeer вне форума Ответить с цитированием
Старый 30.10.2010, 20:55   #2
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

вверх тему ^^
boomeer вне форума Ответить с цитированием
Старый 03.11.2010, 09:02   #3
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Код:
#include <cstdio>
#include <cstring>

int main()
{
	char str1[128], str2[128];
	scanf("%s%s", str1, str2);

	int a, c;
	unsigned b, d;
	char sk1, sk2;

	if(strchr(str1, '/'))
		sscanf(str1, "%c%d/%u,", &sk1, &a, &b);
	else
	{
		sscanf(str1, "%c%d,", &sk1, &a);
		b = 1U;
	}
	if(strchr(str2, '/'))
		sscanf(str2, "%d/%u%c", &c, &d, &sk2);
	else
	{
		sscanf(str2, "%d%c", &c, &sk2);
		d = 1U;
	}

	int left(a/(int)b), right(c/(int)d);
	if(sk1 == '(' && !(a % b))
		left++;
	if(sk2 == ')' && !(c % d))
		right--;

	if(a%b && a/(int)b > 0)
		left++;
	if(c%d && c/(int)d < 0)
		right--;

	printf("%d\n", (right-left >= 0 ? right-left+1 : 0));

	return 0;
}
Не работает для (1/2, 3], к примеру... как доработать?
boomeer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Промежутки между ячейками (td) таблицы _PROGRAMM_ HTML и CSS 4 10.01.2010 22:59
Промежутки времени SatiriK(rus) SQL, базы данных 4 19.11.2008 00:37