Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.09.2010, 16:22
Новичок

Отправить личное сообщение для ADIL Посмотреть профиль Найти все сообщения от ADIL
 
Регистрация: 02.09.2010
Сообщений: 3

Задача Тождество
Тождество
(Время: 1 сек. Память: 16 Мб Сложность: 26%)
Вам необходимо проверить домашнюю работу Васи Пупкина, в которой он написал равенство. Например, запись вида «2+3=5» является правильной, а «23*7=421» неверная, но корректная. Корректной записью выражения будем называть последовательность: число, операция («+», «-», «*», «/»), число, знак равенства, число. Т.е. если в записи не хватает цифр или же встречается неизвестный символ. Например, записи «2*=3», «173» и «2+2=a» некорректны.

Входные данные
Входной файл INPUT.TXT состоит из единственной строки, содержащей запись арифметического выражения. Все числа в записи целые и не превышают по абсолютной величине 30000. Длина арифметического выражения не превышает 100 символов.

Выходные данные
В выходной файл OUTPUT.TXT нужно вывести «YES», если указанная запись правильна (т.е. равенство представляет собой тождество), «NO» - если корректная, но неверная и «ERROR», если в записи присутствуют ошибки.


не могу пройти десятый тест, какая-то проблема с круглыми числами, помогите.
задача по теме: Разбор строк. с сайта acmp.ru под № 80
  #2  
Старый 02.09.2010, 16:43
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

Как помочь-то?
Задача выглядит весьма простой, так что, наверно, стоит привести решение для поиска ошибок.
  #3  
Старый 02.09.2010, 19:17
Новичок

Отправить личное сообщение для ADIL Посмотреть профиль Найти все сообщения от ADIL
 
Регистрация: 02.09.2010
Сообщений: 3

Сообщение от MBo Посмотреть сообщение
Как помочь-то?
Задача выглядит весьма простой, так что, наверно, стоит привести решение для поиска ошибок.
да можете написать решение
  #4  
Старый 09.11.2010, 22:23
Новичок

Отправить личное сообщение для хус++ Посмотреть профиль Найти все сообщения от хус++
 
Регистрация: 09.11.2010
Сообщений: 7

здравствуй ADIL
я сам задачу писал оч давно, поэтому просто выложу АС-код, думаю найдеш свой недочет
#include <string.h>
#include <stdio.h>
int main(void)
{
freopen("INPUT.TXT","r",stdin);
freopen("OUTPUT.TXT","w",stdout);
char s[102], znak;
long a=0,b=0,c=0;
long i,k,x=0;
scanf("%s",&s);
k=strlen(s);
for(i=0;i<k;i++)
{
if(s[i]<48 || s[i]>58)
{
if(s[i]!='+' & s[i]!='-' & s[i]!='/' & s[i]!='*' & s[i]!='=')
{printf("ERROR");goto A;}
}
}
i=0;
/* ***** a ***** */
x=1;
if(s[0]=='-') {x=-1; i++;}
if(s[0]=='+') {x=1; i++;}

while(s[i]!='+' & s[i]!='-' & s[i]!='/' & s[i]!='*' & s[i]!='=' & s[i]!=0)
{
a=a*10;
a=a+s[i]-48;
i++;
}
a=a*x;

if(s[i]==0 || s[i]=='=')
{printf("ERROR");goto A;}


znak=s[i];
/* ***** b ***** */
i++;
if(s[i]=='/' | s[i]=='*' | s[i]==0 | s[i]=='=')
{printf("ERROR");goto A;}
x=1;
if(s[i]=='-'){x=-1;i++;}
if(s[i]=='+'){x=1;i++;}
while(s[i]!='=' & s[i]!=0)
{
if(s[i]=='+' | s[i]=='-' | s[i]=='/' | s[i]=='*' | s[i]==0)
{printf("ERROR");goto A;}
b=b*10;
b=b+(s[i]-48);
i++;
}
b=b*x;
if(s[i]==0 || s[i]!='='){printf("ERROR");goto A;}

/* ***** c ***** */
i++;
x=1;
if(s[i]=='-'){x=-1;i++;}
if(s[i]=='+'){x=1;i++;}
if(s[i]==0){printf("ERROR");goto A;}
while(s[i]!=0&s[i]>=48&s[i]<=58)
{
c=c*10;
c=c+(s[i]-48);
i++;
}
c=c*x;
/* p*r*o*v*e*r*k*a */
if(znak=='+')
{
if(a+b==c){printf("YES");}
else {printf("NO");}
}
if(znak=='-')
{
if(a-b==c){printf("YES");}
else {printf("NO");}
}
if(znak=='*')
{
if(a*b==c){printf("YES");}
else {printf("NO");}
}
if(znak=='/')
{
if(b==0){printf("NO");goto A;}
if(a/b==c & a%b==0){printf("YES");}
else {printf("NO");}
}
A:
return 0;
}
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра