河南第八届省赛(挑战密室)

来源:互联网 发布:互联网数据分析平台 编辑:程序博客网 时间:2024/04/29 14:16

题目地址:点击打开链接

思路:调了3,4个小时才调出来,还是菜啊,各种细节基础问题出错,刚开始想着短一点,不枚举,后来快写完了才发现括号没考虑,后来想着括号里和括号外用同一个函数调用,懒得想了,直接爆吧,但是还得考虑括号外的数字,还得考虑整个式子前面的数字,剩下的就是最伤心的部分了,每次用的都是一个数组结果却用strlen求值,然后函数调用,结果数组的值就是不对,结果你懂的,后来数组的长度虽然对了,结果if-else语句控制的下标超出求的长度导致wrong,后来就在if语句里面又加一个判断条件,还有就是getchar()放到while语句里wrong了几发

AC代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>using namespace std;char a[55];char b[55];char c[55];int qiu(char b[],int m){    int i;    int sum1 = 0,sum;    for(i=0; i<m; i++)    {        sum = 0;        if(b[i] == 'C' && b[i+1] == 'l')        {            sum += 35;            if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m)//怕超出界限            {                sum *= (b[i+2] - '0');                i = i + 2;            }            else            {                i = i + 1;            }        }        else if(b[i] == 'A' && b[i+1] == 'l')        {            sum += 27;            if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m)            {                sum *= (b[i+2] - '0');                i = i + 2;            }            else            {                i = i + 1;            }        }        else if(b[i] == 'C' && b[i+1] == 'a')        {            sum += 40;            if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m)            {                sum *= (b[i+2] - '0');                i = i + 2;            }            else            {                i = i + 1;            }        }        else if(b[i] == 'Z' && b[i+1] == 'n')        {            sum += 65;            if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m)            {                sum *= (b[i+2] - '0');                i = i + 2;            }            else            {                i = i + 1;            }        }        else if(b[i] == 'N' && b[i+1] == 'a')        {            sum += 23;            if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m)            {                sum *= (b[i+2] - '0');                i = i + 2;            }            else            {                i = i + 1;            }        }        else if(b[i] == 'N')        {            sum += 14;            if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m)            {                sum *= (b[i+1] - '0');                i = i + 1;            }        }        else if(b[i] == 'C')        {            sum += 12;            if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m)            {                sum *= (b[i+1] - '0');                i = i + 1;            }        }        else if(b[i] == 'O')        {            sum += 16;            if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m)            {                sum *= (b[i+1] - '0');                i = i + 1;            }        }        else if(b[i] == 'S')        {            sum += 32;            if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m)            {                sum *= (b[i+1] - '0');                i = i + 1;            }        }        else if(b[i] == 'H')        {            sum += 2;            if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m)            {                sum *= (b[i+1] - '0');                i = i + 1;            }        }        sum1 += sum;    }    return sum1;}int main(){    int i,j,k;    int t;    int cheng;    scanf("%d",&t);    getchar();//放到这里别放到while里面    while(t--)    {        cheng = 1;        gets(a);        int n = strlen(a);        k = 0;        for(i=0; i<n; i++)        {            if(a[i] == '=')            {                for(j=i+1; j<n; j++)                {                    if(a[j] == '+')                    break;                    b[k++] = a[j];                }                break;            }        }//把括号和加号里面的字符串截出来        int sum = 0,sum1;        int m = k;        for(i=0; i<m; i++)        {            if(b[i] == '(')            {                sum1 = 0;                k = 0;                for(j=i+1; j<m; j++)                {                    if(b[j] == ')')                        break;                    c[k++] = b[j];                }                sum1 = qiu(c,k);                j++;                if(b[j] >= '0' && b[j] <='9')                    sum1 *= (b[j] - '0');                sum += sum1;            }        }//加上括号里面的值        if(b[0] >= '0' && b[0] <= '9')        {            cheng = b[0] - '0';            i = 1;        }        else        {            i = 0;        }        k = 0;//判断第一个是否为数字        for(; i<m; i++)        {            if(b[i] == '(')            {                i++;                while(1)                {                    if(b[i] == ')')                        break;                    i++;                }                if(b[i+1] >= '0' && b[i+1] <= '9')                    i += 1;            }            else            {                c[k++] = b[i];            }        }//加上括号外面的值        sum += qiu(c,k);        sum *= cheng;        printf("%04d\n",sum);    }}


0 0
原创粉丝点击