河南第八届省赛(挑战密室)
来源:互联网 发布:互联网数据分析平台 编辑:程序博客网 时间: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
- 河南第八届省赛(挑战密室)
- 第八届河南省程序设计大赛 挑战密室(化学式模拟)
- 挑战密室(化学方程式)
- NYOJ 挑战密室---1236第八届
- 河南第八届省赛(Distribution)
- 挑战密室
- 河南省第八届ACM A.挑战密室 详细题解
- nyoj 1236 挑战密室(河南省第八届acm程序设计大赛)
- 第八届河南省程序设计大赛-NYOJ-1236-挑战密室
- nyoj 1236 挑战密室 第八届河南省程序设计大赛
- NYOJ1236 第八届acm省赛 A挑战密室
- 挑战密室,第八届河南省省赛,郑大OJ10406
- 问题 A: 挑战密室 河南省第九届省赛
- HNACM(八)-A.挑战密室
- 【南理oj】1236 - 挑战密室(模拟)
- A.挑战密室
- nyoj 89 挑战密室
- nyoj 1236 挑战密室
- 1027. 打印沙漏(20)
- C语言register关键字—最快的关键字
- 从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题(如何解决编码 0 延时)
- [转载]windows x64下正确安装PIL:解决python关联zlib、jpeg问题
- 什么是URL编码,URL解码
- 河南第八届省赛(挑战密室)
- POJ 2342 Anniversary party
- CSDN-MarkDown编辑器官方使用详解备忘
- 让你彻底弄清offset
- android:descendantFocusability用法简析(listview的item点击无响应问题)
- 同时看过 unreal4 和 Unity 源代码的人觉得哪个引擎架构更好?
- Tomcat部署web项目的4种方式
- android 扩展现在有控件(LinearLayout)
- 5.4 Next Number