FJNU OJ 1054 노란 계산기 II
Submit Status Discuss Description 우리는 황황이 옛날을 그리워하는 사람이라는 것을 알고 있다. 그는 항상 초등학교 수학 문제를 꺼내서 풀기를 좋아한다. 이렇게 하면 그는 자신의 지능이 얼마나 높은지 보여줄 수 있다. (그는 자신을 속이고 있는 것이 분명하다) 그러나 황황의 지능은 높지 않다. 초등학교의 일원 일차 방정식을 풀 때 머리가 아프기 때문에 그는 프로그램을 써서 일원 일차 방정식을 풀기를 희망한다.
Input에는 여러 개의 샘플이 포함되어 있습니다. 첫 번째 줄의 숫자 T는 테스트 샘플의 개수를 표시하고, 다음 T줄은 줄마다 문자열이 일원일차 방정식을 표시합니다.
방정식의 설명 규칙: 하나의 변수, 정수 및 +, -, =기호로 구성되어 있으며, 숫자와 기호 사이에는 반드시 빈칸이 있고, 정수와 변수 사이에는 빈칸이 없고, 기호와 변수 사이에는 반드시 빈칸이 있으며, 등호 양쪽에는 빈칸이 있습니다.(방정식 설명을 이해할 수 없을 것 같으면 입력 예시를 참고하십시오)
방정식을 구성하는 문자 수가 30을 초과하지 않도록 보증합니다.
Output에 풀이 있으면, 두 소수의 소수를 보존하는 부동점수를 출력해서 방정식을 표시합니다.
풀지 않은 경우 "no solution"을 출력합니다(따옴표 없음).
힌트: 예를 들어 x=x, 1=1, x-1=x-1 같은 식은 무해로 판정된다. 즉, 마지막에 x가 사라지면 방정식이 무해해진다는 것이다!
Sample Input 3 x + 2 x = 3 - x - 3 = 0 1 = 1 Sample Output 1.00 - 3.00 no solution HINT Source 2015년 저학년 프로그램 설계 대회 평가전
그냥 여러 가지 시뮬레이션, 여러 가지 번거로운 데이터 범위가 작아졌어요. 아니면 큰 숫자를 써야 돼요.
#include "cstring"
#include "string"
#include "iostream"
#include "cstdio"
#include "cmath"
#include "stack"
#define MIN -1
#define PLUS 1
using namespace std;
int main()
{
int ncase;
while (scanf("%d", &ncase) != EOF)
{
getchar();
while (ncase--)
{
char a[1000];
gets(a);
int i = 0;
int left_num = 0, left_num_x = 0;
int right_num = 0, right_num_x = 0;
int flag = 0;//
stack <char> list;
int symbol = PLUS;
// int symbol_num_x = PLUS;
int marklr = 0;
for (int j = 0;; j++)
{
if (a[j] == '\0')
break;
if (!((a[j] >= '0'&&a[j] <= '9') || a[j] == ' ' || a[j] == '+' || a[j] == '-' || a[j] == '='))
{
a[j] = 'x';
}
}
while (a[i] != '\0')
{
if (flag == 0&&a[i]=='x')
{
if (marklr == 0)
{
if (symbol == PLUS)
left_num_x++;
else
left_num_x--;
}
else
{
if (symbol == PLUS)
right_num_x++;
else
right_num_x--;
}
}
if (flag == 1 && a[i] == 'x')
{
int sum = 0;
int v = 1;
while (!list.empty())
{
sum += (list.top()-'0')*v;
list.pop();
v = v * 10;
}
if (marklr == 0)
{
if (symbol == PLUS)
left_num_x += sum;
else
left_num_x -= sum;
}
else
{
if (symbol == PLUS)
right_num_x += sum;
else
right_num_x -= sum;
}
}
if (a[i] >= '0'&&a[i] <= '9')
{
flag = 1;
list.push(a[i]);
}
if (a[i] == '+')
{
int sum = 0;
int v = 1;
while (!list.empty())
{
sum += (list.top()-'0')*v;
list.pop();
v = v * 10;
}
if (marklr == 0)
{
if (symbol == PLUS)
left_num += sum;
else
left_num -= sum;
}
else
{
if (symbol == PLUS)
right_num += sum;
else
right_num -= sum;
}
symbol = PLUS;
flag = 0;
}
if (a[i] == '-')
{
int sum = 0;
int v = 1;
while (!list.empty())
{
sum += (list.top()-'0')*v;
list.pop();
v = v * 10;
}
if (marklr == 0)
{
if (symbol == PLUS)
left_num += sum;
else
left_num -= sum;
}
else
{
if (symbol == PLUS)
right_num += sum;
else
right_num -= sum;
}
symbol = MIN;
flag = 0;
}
if (a[i] == '=')
{
int sum = 0;
int v = 1;
while (!list.empty())
{
sum += (list.top() - '0')*v;
list.pop();
v = v * 10;
}
if (marklr == 0)
{
if (symbol == PLUS)
left_num += sum;
else
left_num -= sum;
}
else
{
if (symbol == PLUS)
right_num += sum;
else
right_num -= sum;
}
marklr = 1;
symbol = PLUS;
flag = 0;
}
i++;
}
int sum = 0;
int v = 1;
while (!list.empty())
{
sum += (list.top() - '0')*v;
list.pop();
v = v * 10;
}
if (marklr == 0)
{
if (symbol == PLUS)
left_num += sum;
else
left_num -= sum;
}
else
{
if (symbol == PLUS)
right_num += sum;
else
right_num -= sum;
}
if (left_num == right_num&&left_num_x == right_num_x)
printf("no solution
");
else
{
int totalx = left_num_x - right_num_x;
int totalnum = right_num - left_num;
if (totalx == 0)
{
printf("no solution
");
continue;
}
double ans = totalnum*1.0 / totalx*1.0;
printf("%.2lf
", ans);
}
}
}
}
/************************************************************** Problem: 1054 User: raphl Language: C++ Result: Accepted Time:4 ms Memory:1272 kb ****************************************************************/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.