题目1描述
输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。
输入描述:
输入一个算术表达式
输出描述:
得到计算结果
示例1
输入
3+2*{1+2*[-4/(8-6)+7]}
输出
25
#include <stdio.h> #include <string.h> #include <ctype.h> int pos; int compute(char *data) { int stack[1000]; int i, top = 0; int len; int num; char flag = '+'; int rc = 0; len = strlen(data); while(pos < len){ if(data[pos] == '{' || data[pos] == '[' || data[pos] == '('){ pos++; num = compute(data); } while(pos < len && isdigit(data[pos])){ num = num*10 + data[pos] - '0'; pos++; } switch(flag){ case '+': stack[top++] = num; break; case '-': stack[top++] = -num; break; case '*': stack[top-1] *= num; break; case '/': stack[top-1] /= num; break; } flag = data[pos]; num = 0; if(data[pos] == '}' || data[pos] == ']' || data[pos] == ')'){ pos++; break; } pos++; } for(i=0; i<top; i++) { rc += stack[i]; } return rc; } int main(void) { char data[1000]; scanf("%s", data); int rc = compute(data); printf("%d", rc); return 0; }
题目2描述
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
输入描述:
每组样例输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出描述:
每组样例输出一行结果
输入
2 2
1 2
输出
6
3
#include <iostream> using namespace std; int func(int m, int n) { if (m == 0 || n == 0) { return 1; } return func(m, n - 1) + func(m - 1, n); } int main() { int m, n; while (cin >> m >> n) { cout << func(m, n) << endl; } return 0; }