首页 > 代码库 > 第六届华为创新杯编程大赛第二轮(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
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); } }