zoukankan      html  css  js  c++  java
  • 递归之美

    题目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;
    }
  • 相关阅读:
    经纬度计算之身边团购功能实践
    简单ajax分页 jQuery实现动态创建Dom
    执行异常处理方法
    Asp.Net中获取 字符串中中英字符的长度
    登录失败3次验证码校验
    Sql Server 中 删除正在使用的数据库
    使用MyXls,出现访问被拒绝情况
    兼容IE、Chrome,Opera动态添加文本框
    8.20 一周学习总结
    8.26 一周学习总结
  • 原文地址:https://www.cnblogs.com/god-of-death/p/14758849.html
Copyright © 2011-2022 走看看