首页 > 代码库 > 第六届华为创新杯编程大赛第二轮(2014.4.29)

第六届华为创新杯编程大赛第二轮(2014.4.29)

第一题:外星人比数的大小

来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000000000000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:

1、将要比较的两个数字分别转换成二进制数字;

2、计算两个二进制数字中1的个数,个数多的数字为两者中的大者;

3、负数按照其绝对值进行比较;

请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:

1、输入数据为范围在-32768到32768(地球人的十进制世界)之间的任意两个数字;

2、如果经过比较后2个数相等,输出为0,如果不相等,输出最大值。如果输入非法,输出-1。

 简单的字符串题

import java.util.Scanner;
public class Main{
    public static void main(String[] args)   {
        Scanner in =new Scanner(System.in);
        int m,n;
        String m1,n1;
        int mm,nn,mo = 0,no=0;
        mm=0;
        nn=0;
        Boolean flag=true;
        if(in.hasNextInt())
        mo=in.nextInt();
        else {
            flag=false;}
        if(in.hasNextInt())
        no=in.nextInt();
        else {
            flag=false;}
        if(!flag){
            System.out.println("-1");return;
        }
        m=Math.abs(mo);
        n=Math.abs(no);
        if(m>32768 || n>32768){
            System.out.println("-1");return;
        }
        m1=Integer.toBinaryString(m);
        n1=Integer.toBinaryString(n);
        //System.out.println(m1);
        //System.out.println(n1);
        for(int i=0;i<m1.length();i++){
            if(m1.charAt(i)==‘1‘){
                mm++;
            }
        }
        for(int j=0;j<n1.length();j++){
                if(n1.charAt(j)==‘1‘){
                    nn++;
                }        
        }
        if(mm>nn)
            System.out.println(mo);
        else if(mm<nn)
            System.out.println(no);
        else
            System.out.println("0");
        
}  }

 第二题:笨笨熊搬家打包篇
描述:        
森林里的笨笨熊今天可开心啦——他买了新房子,乔迁新喜要搬家了。因此,笨笨熊请了许多好朋友来帮忙搬家,并准备了很多小纸盒用来装需要搬的物品,不过,这些纸盒的容积都是相同的,并且最多只能装两个物品。但是,为了不打扰太多的朋友,笨笨熊想了个“聪明”办法:让每个纸盒使用效率最高(注:只要纸盒容积大于物品的体积之和就认为可以装下;物品体积不会大于纸盒容积),这样需要的纸盒最少。为了帮助笨笨熊提前通知朋友,请你根据笨笨熊的办法,帮忙算出:需要纸盒的最少数目是多少?   


运行时间限制:        无限制
内存限制:        无限制
输入:        
整数V——纸盒的容积;
整数N——物品的总数目N;
共N个整数(对应N个物品的体积,每个整数用空格隔开)。

输出:        
整数M——需要纸盒的最少数目;    
    
样例输入:        
10

2 3
样例输出:        
1

排序+贪心

import java.util.Arrays;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in =new Scanner(System.in);
        int v,n,m;
        m=0;
        int k=0;
        v=in.nextInt();
        n=in.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++){
            a[i]=in.nextInt();
        }
        Arrays.sort(a);
        for(int j=n-1;j>=k;j--){
            if(a[j]+a[k]>v){
                m++;
            }
            else {
                k++;
                m++;
            }
                
        }
        System.out.print(m);
}
}