zoukankan      html  css  js  c++  java
  • 2014深圳华为机试剖析

    题一:

    (1)给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数;2.递减数中各位数之和最大的数)之和。
    递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况。最大递减数:所输入整数的所有递减数中值最大的一个。 如: 75345323,递减数有:75,753,53,53,532,32。那么最大的递减数为753。
    各位数字之和最大的递减数: 如75345323中的各递减数:75各位数之和=12(7+5=12),753各位数之和=15(7+5+3=15),53各位数之和=8(5+3=8),532各位数之和=10(5+3+2=10),32各位数之和=5(3+2=5)。那么各位数字之和最大的递减数为753。输出结果=最大递减数+各位数之和最大的递减数。(1506=753+753)

    实现代码如下【机试都是靠华为自己写的程序来判断是否正确的,所以一定要按照华为机试说明来,此次标明类名必须为Main】:

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main
    {
        public static void main(String[] args)
        {
            //构造一个输入扫描对象
            Scanner scanner = new Scanner(System.in);
            //存储输入字符的变量
            String input_str = null;
            //字符串长度变量
            int str_size = 0;
            //输出的和
            int sum = 0;
            //新的字符。
            String newstr;
            //数组用来保存各个数值
            String[] array_str;
            //用来保存最大递减数
            int max_int = 0;
            //最大递减数之和。
            int max_sum = 0;
            //保存递减数
            ArrayList<String> list = new ArrayList<String>();
            
            while(true)
            {
                //通过用户输入获取一个字符串
                input_str = scanner.next();
                
                String reg = "^[-+]?[0-9]+(\.[0-9]+)?$";
                //"^\d+$"; 匹配正数
                //判断是否为数字
                boolean isNum = input_str.matches(reg);
                if(isNum)
                {
                    //处理负数
                    if(input_str.startsWith("-"))
                    {
                        input_str = input_str.substring(1,input_str.length());
                    }
                    
                    //把字符串长度赋给str_size变量
                    str_size = input_str.length();
                    
                    array_str = new String[str_size];
                    
                    for(int i = 0;i < str_size;i++)
                    {
                        array_str[i] = input_str.substring(i,i+1);
                    }
                    
                    for(int i = 0;i < array_str.length;i++)
                    {
                        newstr = new String();
                        
                        for(int j = i;j < (array_str.length-1);j++)
                        {
                            if(Integer.parseInt(array_str[j]) > Integer.parseInt(array_str[j+1]))
                            {
                                if(j == i)
                                {
                                    newstr += array_str[j]+array_str[j+1]; 
                                }else
                                {
                                    newstr += array_str[j+1]; 
                                }
                                
                                list.add(newstr);
                            }else
                            {
                                break;
                            }
                            
                            
                        }
                        
                        
                    }
                    //找出递增最大值,并算出各位数相加最大值。
                    int number = 0;
                    String str_num;
                    int temp_sum = 0;
                    int i_num=0;
                    int max_num=0;
                    for(int i = 0;i < list.size();i++)
                    {
                        temp_sum = 0;
                        str_num = list.get(i);
                        number = Integer.parseInt(str_num);
                        
                        if(number > max_int)
                        {
                            max_int = number;
                        }
                        
                        
                        for(int j = 0;j<str_num.length();j++)
                        {
                            i_num = Integer.parseInt(str_num.substring(j,j+1));
                            temp_sum += i_num;
                            
                        }
                        
                        if(temp_sum > max_num)
                        {
                            max_num = temp_sum;
                            max_sum = number;
                        }
                    }
                    
                    System.out.println(max_sum+max_int);
                    
                }else
                {
                    //不是数字重新输入
                    continue;
                }
            }
        }
    }

    题二:

    (2)描述: 程序的规格说明要求:
    1. 如果第一个字符不是#,则输出N;
    2. 如果第一个字符是#,第二个字符不是数字,则输出M;
    3. 如果第一个字符是#,例如#n012345则输出从第三个字符开始计算,第0到第n个之间所有字符,n等于3则输出0123,如果n超出长度范围则输出从第三个字符开始全部字符.
    请实现上述描述的程序.
    题目类别: 字符串
    难度: 初级
    分数: 60
    运行时间限制: 10 Sec
    内存限制: 200 MByte
    阶段: 应聘考试
    输入: 无限制
    输出: N、M、对应字符串
    样例输入: #3012345
    样例输出: 0123
    答案提示: 输入输出参数的获取方式
    TCL:

    gets stdin a
    gets stdin b
    puts -nonewline stdout  [expr $a+$b]
    Perl:
    $a=;
    $b=;
    print  $a+$b;
    ruby:
    import sys
    a = raw_input()
    b = raw_input()
    sys.stdout.write(str(int(a)+int(b)))
    python:
    a=STDIN.gets 
    b=STDIN.gets
    print a.to_i+b.to_i

    实现代码如下【机试都是靠华为自己写的程序来判断是否正确的,所以一定要按照华为机试说明来,此次标明类名必须为Main】:

    import java.util.Scanner;
    
    public class Main
    {
        public static void main(String[] args)
        {
             //构造一个输入扫描对象
             Scanner scanner = new Scanner(System.in);
             //存储输入字符的变量
             String input_str = null;
             //用来保存第二个字符的变量
             String first_str = null;
             //字符串长度变量
             int str_size = 0;
             //输出的变量
             String out_str = null;
             //要截取的开始位置
             int start_index = 0;
             //要截取的结束位置
             int end_index = 0;
             //要截取的新长度
             int new_size=0;
             //新的字符。
             String newstr = null;
             while(true)
             {
                 //通过用户输入获取一个字符串
                 input_str = scanner.next();
                 //把字符串长度赋给str_size变量
                 str_size = input_str.length();
                 //判断字符是否以#开头
                 if(input_str.startsWith("#"))
                 {
                    
                     //为保证正常截取第二个字符,输入的字符串长度必须要大于1;
                     if(str_size>2)
                     {
                         //截取第二个字符
                         first_str = input_str.substring(1,2);
                         //通过正则判断是否为数字
                         String reg = "^\d+$";
                         boolean isNum = first_str.matches(reg);
                         if(isNum)
                         {
                             //把字符型数值转化为int类型变量
                             int strToInt = Integer.valueOf(first_str);
                             //当第二个字符数值大于整个字符串长度时,为避免不出异常,
                             //字符串长度必须大于3
                             if(str_size >= 3)
                             {
                                 newstr = input_str.substring(2,str_size);
                                 new_size = newstr.length();
                                 
                                 if((strToInt+1) > new_size)
                                 {
                                     start_index = 0;
                                     end_index = new_size;
                                 }else
                                 {
                                     start_index = 0;
                                     end_index = (strToInt+1);
                                }
                                 
                                
                             }
                             
                             if(end_index > 0) 
                             {
                                 out_str = newstr.substring(start_index,end_index);
                                 System.out.println(out_str);
                             }
                             
                         }else
                         {
                             System.out.println("M");
                         }
                         
                         
                         
                     }
                     
                 }else
                 {
                     System.out.println("N");
                 }
                 
                 //重新初始化变量
                  input_str = null;
                 first_str = null;
                 str_size = 0;
                 out_str = null;
                 start_index = 0;
                 end_index = 0;
                 new_size=0;
                 newstr = null;
                 
             }
        }
    }
  • 相关阅读:
    jQuery 在 IE 上 clone checkbox 的問題。
    C/C++ typedef用法
    C++继承
    map常用操作
    C++ JsonCpp 使用(含源码下载)
    string常用操作
    C++虚函数
    STL容器迭代过程中删除元素技巧(转)
    关于IE下用HTTPS无法下载/打开文件(转)
    C++STL概览
  • 原文地址:https://www.cnblogs.com/luwenbin/p/4099574.html
Copyright © 2011-2022 走看看