笔试题总结

  1. 每瓶水一元,每两个瓶子可以换一瓶水,现在有20元,可以换多少瓶水?(编程实现)

    public class CalNum
    {
        public static void main(String[] args)
        {
            int MONEY = 20;               //买水的总钱数
            int PRICE = 1;                //每瓶水的单价
            int PERNUM = 2;                //可以换取一瓶水的瓶子个数
            int restNum = 0;               //每次换完水之后剩下的瓶子个数
            int currentNum = MONEY / PRICE;//当前总的瓶子个数
            int sumNum = 0;                //总共需要的瓶子个数

            while(currentNum > 0){
                sumNum += currentNum;
                if(restNum > 0)
                    currentNum += restNum;
                restNum = currentNum % PERNUM;
                currentNum /= PERNUM;
            }
            System.out.println("总的瓶子个数为:"+sumNum);
        }
    }

  2. 将中文数值转换为阿拉伯数值,例如“一万零一十”转换为10010。要求:最大单位为亿级别;数值单位有亿、万、千、百、十。

/**
*将中文数值转换为阿拉伯数值,例如“一万零一十”转换为10010。
* 要求:最大单位为亿级别;数值单位有亿、万、千、百、十。
*/
public class WordChange
{
    public static void main(String[] args)
    {
        char[] units = {'十','百','千','万','亿'};                         //单位单元
        char[] words = {'零','一','二','三','四','五','六','七','八','九'};//数值单元
        String srcStr = "九百二十万六千零一十";
        double tarStr = 0.0;
        double currentNum = 0;
        double tempSum = 0.0;

        for(int i=0;i<srcStr.length();i++){
            char c = srcStr.charAt(i);
            boolean flag = false;
            for(int j=0;j<words.length;j++){
                if(words[j] == c){
                    currentNum = j;                                                //记录数值
                    flag = true;
                    break;
                }
            }
            if(flag)
                continue;

            for(int k=0;k<units.length;k++){
                if(units[k] == c){
                    if(c == '亿'){
                        tarStr += (tempSum+currentNum)*Math.pow(10,8);
                        tempSum = 0;
                    }else if(c == '万'){
                        tarStr += (tempSum+currentNum)*Math.pow(10,k+1);
                        tempSum = 0;
                    }else
                        tempSum += currentNum*Math.pow(10,k+1);
                    currentNum = 0.0;
                    break;
                }else if(k == units.length - 1){
                    System.out.print("输入有误,请检查错误!");
                }
            }
        }
        tarStr += (tempSum + currentNum);

        System.out.println("最后的结果为:"+tarStr);
    }
}
/**
*思路:1、设计数值单元和单位单元
*      2、循环判断这个字符是数值还是单位,如果是数值,继续睇3步;否则,继续第4步
*      3、判断数值,根据下标转换为相应的阿拉伯数字
*      4、如果是单位,将其分成三部分,第一部分以'亿'为标示,第二部分以'万'为标示,
*           第三部分以其它(十、百、千)为标示
*      5、计算部分:如果是第三部分为标示,则直接计算相加(如五百,就是5*(10^2))
*         如果是其它单位分类,则用所计算的和乘以相应的单位(如果是五亿,就是和5*(10^8))
*      6、循环结束之后,将所有和相加。(包括相加总和和最后一个数字)
*  这是本人思路,如果有其它思路,欢迎提出
*/

posted on 2013-07-16 22:48  水魚浵王子  阅读(223)  评论(0)    收藏  举报