求hack 肝了一晚上AC了 但是感觉还有被hack的可能
查看原帖
求hack 肝了一晚上AC了 但是感觉还有被hack的可能
974277
水星湖psgqwq楼主2023/9/20 21:24
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    
    char unknown; //未知数 
    int eq;

    for (int i = 0; i < s.size(); i++) {
        if (s[i] >= 'A' && s[i] <= 'Z' || s[i] >= 'a' && s[i] <= 'z')
            unknown = s[i];
        if (s[i] == '=')
            eq = i;
    }
    s+="=";
    int c = 0; //常数 
    int x = 0; //系数
    int last = 0;
    for (int i = 1; i <= eq; i++) {
        if (s[i] == '+' || s[i] == '-' || s[i] == '=') {
            if (s[i - 1] != unknown)
                c += stoi(s.substr(last, i - last));
            else
            {
            	if(i-last-1==0)
            	{
            		x++;
            		last = i;
            		continue;
            	}
            	if(i-last-1==1&&last!=0)
            	{
            		if(s[last]=='+')
            			x++;
            		else 
            			x--;
            		last = i;
            		continue;
            	}
            	if(i-last-1==1&&last==0&&(s[0]=='+'||s[0]=='-'))
            	{
            		if(s[0]=='+')
            			x++;
            		else x--;
            		last = i;
            		continue;
            	}
                x += stoi(s.substr(last, i - last - 1));
            }
            last = i;
        }
    }
    last = eq + 1;
    for (int i = eq + 2; i < s.size(); i++) {
        if (s[i] == '+' || s[i] == '-' || s[i] == '=') {
            if (s[i - 1] != unknown)
                c -= stoi(s.substr(last, i - last));
            else
            {
            	if(i-last-1==0)
            	{
            		x--;
            		last = i;
            		continue;
            	}
            	if(i-last-1==1&&last!=eq+1)
            	{
            		if(s[last]=='+')
            			x--;
            		else 
            			x++;
            		last = i;
            		continue;
            	}
            	if(i-last-1==1&&last==eq+1&&(s[last]=='+'||s[last]=='-'))
            	{
            		if(s[eq+1]=='+')
            			x++;
            		else x--;
            		last = i;
            		continue;
            	}
                x -= stoi(s.substr(last, i - last - 1));
            }
            last = i;
        }
    }
    double ans = -c*1.0/x;
    if(ans!=0)
    printf("%c=%.3lf",unknown,ans);
    else printf("%c=0.000",unknown);
    return 0;
}

代码主要就是分等号左右两边处理

2023/9/20 21:24
加载中...