[关闭]
@xunuo 2017-01-18T21:19:36.000000Z 字数 2731 阅读 1101

解方程


Time Limit: 1000 MS Memory Limit: 65536 KB

模拟

来源:
swus power toj:swust poweroj 1023 解方程


Description

In this problem, you are to solve a very easy linear equation with only one variable x with no parentheses! An example of such equations is like the following:


2x - 27 + 5x + 300 = 98x
An expression in its general form, will contain a '=' character with two expressions on its sides. Each expression is made up of one or more terms combined by '+' or '-' operators. No unary plus or minus operators are allowed in the expressions. Each term is either a single integer, or an integer followed by the lower-case character x or the single character x which is equivalent to 1x.

You are to write a program to find the value of x that satisfies the equation. Note that it is possible for the equation to have no solution or have infinitely many. Your program must detect these cases too.

Input

The first number in the input line, t (1 <= t <= 10) is the number of test cases, followed by t lines of length at most 255 each containing an equation. There is no blank character in the equations and the variable is always represented by the lower-case character x. The coefficients are integers in the range (0...1000) inclusive.

Output

The output contains one line per test case containing the solution of the equation. If s is the solution to the equation, the output line should contain [s] (the floor of s, i.e., the largest integer number less than or equal to s). The output should be IMPOSSIBLE or IDENTITY if the equation has no solution or has infinite solutions, respectively. Note that the output is case-sensitive.

Sample Input

3
2x-27+5x+300=98x
x+2=2+x
x+2=x+5

Sample Output

3
IDENTITY
IMPOSSIBLE

题意

    第一行表示将要输入的行数
    接下来输入方程
    若有解,则输出结果,(若结果为负数,则要向下取整!!!)若恒成立则输出 IDENTITY,若无解,则输出IMPOSSIBLE

完整代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<algorithm>
  5. using namespace std;
  6. char s[300];
  7. int a1[300],b1[300],a2[300],b2[300];
  8. int main()
  9. {
  10. int n;
  11. scanf("%d",&n);
  12. while(n--)
  13. {
  14. scanf("%s",s);
  15. int l=strlen(s);
  16. int l1,flag1,flag2=0,flag3;
  17. int sum1=0,sum2=0,sum3=0,sum4=0;
  18. int num1=0,num2=0;
  19. for(int i=0;i<l;i++)
  20. if(s[i]=='=')
  21. l1=i;
  22. flag1=0;
  23. flag3=0;
  24. for(int i=0;i<l;i++)
  25. {
  26. if(i<=l1)
  27. {
  28. flag2=0;
  29. if(s[i]<='9'&&s[i]>='0')
  30. {
  31. flag1++;
  32. num1+=s[i]-'0';
  33. if(s[i+1]<='9'&&s[i+1]>='0')
  34. {
  35. num1*=10;
  36. flag2=1;
  37. }
  38. if(flag2==0&&s[i-flag1]=='-')
  39. num1=-num1;
  40. }
  41. else
  42. flag1=0;
  43. if(s[i]=='x')
  44. {
  45. if(i==0||s[i-1]=='+')
  46. sum1+=1;
  47. else if(s[i-1]=='-')
  48. sum1-=1;
  49. else
  50. sum1+=num1;
  51. num1=0;
  52. }
  53. else if(s[i]=='+'||s[i]=='-'||s[i]=='=')
  54. {
  55. sum2+=num1;
  56. num1=0;
  57. }
  58. }
  59. else if(i>l1)
  60. {
  61. flag2=0;
  62. if(s[i]<='9'&&s[i]>='0')
  63. {
  64. flag3++;
  65. num2+=s[i]-'0';
  66. if(s[i+1]<='9'&&s[i+1]>='0')
  67. {
  68. num2*=10;
  69. flag2=1;
  70. }
  71. if(flag2==0&&s[i-flag3]=='-')
  72. num2=-num2;
  73. }
  74. else
  75. flag3=0;
  76. if(s[i]=='x')
  77. {
  78. if(i==l1+1||s[i-1]=='+')
  79. sum3+=1;
  80. else if(s[i-1]=='-')
  81. sum3-=1;
  82. else
  83. sum3+=num2;
  84. num2=0;
  85. }
  86. else if(s[i]=='+'||s[i]=='-'||i==l-1)
  87. {
  88. sum4+=num2;
  89. num2=0;
  90. }
  91. }
  92. }
  93. int ans;
  94. if(sum1==sum3&&sum2==sum4)
  95. printf("IDENTITY\n");
  96. else if(sum1!=sum3)
  97. {
  98. if((sum4-sum2)*(sum1-sum3)<0&&(sum4-sum2)%(sum1-sum3)!=0)
  99. ans=(sum4-sum2)/(sum1-sum3)-1;
  100. else
  101. ans=(sum4-sum2)/(sum1-sum3);
  102. printf("%d\n",ans);
  103. }
  104. else
  105. printf("IMPOSSIBLE\n");
  106. }
  107. return 0;
  108. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注