九度OJ平台练习 —— 题目1010

这道题目,只不过把加法拐了个弯,数字用英文单词的方式给出,本质其实没有变化。我们要做的,只是根据单词识别出它所代表的数字。

Java代码如下:

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext()){
            String s = cin.nextLine();
            int temp = 0, res = 0;
            for(int i = 0; i < s.length(); i++){                //temp用于存储加数                //当加数为两位数时,例如one two表示12,中间有个空格,需要做判断,0x20是空格的十六进制ASCII码
                if(i == 0 || (s.charAt(i-1) == 0x20 && s.charAt(i) != ‘+‘ && s.charAt(i) != ‘=‘)){
                    temp = temp*10+str2num(s,i);
                }
                else if(s.charAt(i) == ‘+‘){
                    res += temp;
                    temp = 0;
                }
                else if(s.charAt(i) == ‘=‘){                    //这时res为第一个加数的值,temp为第二个加数的值,如果两个都为0,根据题意,退出
                    if(temp == 0 && res == 0)
                        return ;
                    else{
                        res += temp;
                        temp = 0;
                    }
                }
            }
            System.out.println(res);
        }
    }    //单词转数字,用switch解决  
    public static int str2num(String s,int index){
        switch(s.charAt(index)){
        case ‘z‘:return 0;//zero
        case ‘o‘:return 1;//one
        case ‘t‘:
            if(s.charAt(index+1) == ‘w‘)    return 2;//two
            else return 3;//three
        case ‘f‘:
            if(s.charAt(index+1) == ‘o‘)    return 4;//four
            else return 5;//five
        case ‘s‘:
            if(s.charAt(index+1) == ‘i‘)    return 6;//six
            else return 7;//seven
        case ‘e‘:return 8;//eight
        case ‘n‘:return 9;//nine
        default:return 0;
        }
    }
}
时间: 2024-10-27 19:55:46

九度OJ平台练习 —— 题目1010的相关文章

九度OJ平台练习 —— 题目1009

这道题目不是很简单,第一反应可能是真的去构造出一棵树,然后递归遍历,比较两棵树的每个结点是否相同. 但这样子很麻烦,而且递归遍历的效率不高,我看到很多人用递归的方法最后超时无法通过. 我的方法是用静态数组模拟出二叉搜索树,根据二叉搜索树的特性,第i个节点的左孩子是第2*i个节点,右孩子是第2*i+1个节点,我们可以很方便地计算出每个节点的下标. Java代码如下: import java.util.*; public class Main{ public static void main(Str

九度OJ平台练习 —— 题目1012

这道题目设计到一点图论的知识,幸好我曾经学过图论. 思路是这样的: 当两个城市之间有道路能连通时,将这两个城市加入到同一个连通子集里,每个连通子集里的任意两个城市都是可以连通的. 比如存在两条路(1,2)和(2,3),那么1,2加入到一个连通子集s里,s = {1,2},2,3也加入到一个连通子集里,因为2已经在s中,那么把3加入到s中,s={1,2,3},根据s我们就可以得出,1和3是可以连通的. 处理完所有的路之后,我们得到j个连通子集,要使每个城市都能连通,即j个连通子集能够连通,至少需要

九度OJ平台练习 —— 题目1011

这道题是求最大子序列和,这是很经典的算法题,网络上有很多资料,我用的是动态规划的方法,时间复杂度为O(N). 假设序列的长度为n,那么和最大的连续子序列,只能以第0-第n-1中的某一个数结尾. 当遍历到第i个元素时,假设它前面的连续子序列和为maxhere. 如果maxhere>0,maxhere = maxhere + 第i个元素; 如果maxhere<=0,maxhere = 第i个元素(因为如果前面的连续子序列是负的,那我加上你反而变小了,那我还不如不加,就以我自己为子序列的起点,重新往

九度OJ平台练习(二)—— 题目1001

今天刷的题目是1001,题目用英文给出,但不难解读. 题目的意思是说,输入两个矩阵A和B(二者彼此的行数相同,列数相同),进行矩阵加法得到A+B,统计A+B矩阵中零行和零列的数量. 思路: 首先是计算A+B,这个不难,可以用二维数组实现. 其次是统计零行和零列,先明确概念,零行指的是整个行的每个数都为0的行,零列指的是整个列里的每个数都为0的列.那么我们只须分行和分列对数组进行遍历. 代码如下: C++版本 #include<iostream> #include<stdio.h>

九度oj 二叉树遍历 题目1184

 题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串: ABC##DE#G##F### 其中"#"表示的是空格,空格字符代表空树.建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果. 输入: 输入包括1行字符串,长度不超过100. 输出: 可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格. 每个输出结果占一行. 样例输入: abc##de#g

九度oj 题目1007:奥运排序问题

九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1. 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万). 接下来一行给出M个国家号. 输出:                        排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名 格式为: 排名:排名

九度oj 题目1546:迷宫问题 (概率dp guess消元)

题目链接:点击打开链接 题目描述: 给定一个n*m的迷宫,如 S.. ..# E.E 其中,S代表开始位置,#代表不可行走的墙,E代表出口. 主人公从开始位置出发,每次等概率的随机选择下一个可以行走的位置,直到到达某一个出口为止. 现在他想知道,在这一概率事件中,它从开始位置走到某一个出口的期望步数是多少. 输入: 输入包含多组测试用例,每组测试用例由两个整数n,m(1<=n,m<=15)开始,代表迷宫的大小 接下去n行每行m个字符描述迷宫信息,具体规则如题面所述. 数据保证至少存在一个E和一

九度oj题目1009:二叉搜索树

题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树. 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树. 输出:                        如果序列相同则输出YES,否则输出NO 样

[ACM] 九度OJ 合唱队形 (最长递增子序列改版)

题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1680 解决:520 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的身高分别为T1, T2, -, TK, 则他们的身高满足T1 < T2 < - < Ti , Ti > Ti+1 > - > TK (1 <= i <=