华为2014编程大赛初赛

来源:互联网 发布:淘宝有多少个五金冠 编辑:程序博客网 时间:2024/06/09 23:22
注意事项: 
1. 每道题最多只能提交5次; 
2. 程序从标准输入 stdin('Standard Input')获取输入,并将输出结果输出到标准输出stdout('Standard Output')。 3. 输入输出均不能含有任何提示信息; 4. 测试平台的编译内核为VS2005及JDK1.7 。使用Java答题时,类名必须为"Main",不要使用package关键字声明;使用C/C++答
用VS2005支持的数据类型和函数; 5. 代码中不允许有任何文件操作; 
6. 提交答案时请提交全部代码,包括main函数和所有子函数; 7. 答案提交后,点击状态可以查看判题结果及相应提示; 8. 信息注册环节不可跳过,否则无法导出成绩。 
外星人比数的大小 
描述: 
来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:   
1、将要比较的两个数字分别转换成二进制数字;   
2、计算两个二进制数字中1的个数,个数多的数字为两者中的大者;   
3、负数按照其绝对值进行比较;   
请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:   
1、输入数据为范围在-32768到32768(地球人的十进制世界)之间的任意两个数字;   
2、如果经过比较后2个数相等,输出为0,如果不相等,输出最大值。如果输入非法,输出-1。   
运行时间限制: 无限制 内存限制: 无限制 
输入: 待比较的2个数。 
输出: 
按照比较原则,输出最大的值 
样例输入: 
-30 20 样例输出: -30 答案提示: 
  

#include <stdio.h>

 #include<math.h> 

void main() 

{

int erjinz(int a);

 int a,b,x,y,a1,b1; 

scanf("%d%d",&a,&b); 

if(a>32768||a<-32768||b>32768||b<-32768)

  printf("%d",-1);

 else

   { 

      a1=abs(a); 

      b1=abs(b);

      x=erjinz(a1);

      y=erjinz(b1); 

    if(x==y)  

      printf("%d",1); 

    else 

    printf("%d",(x>y)?a:b); 

    }

 }  


int erjinz(int a)

 { 

    int temp=0; 

   do { 

     temp=temp+a%2;

     a=a/2; }while(a!=0); 

     return(temp);

 } 

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

样例输入: 

 10 


2 3 

样例输出:  1 

答案提示:  

 #include<stdio.h> 

#include<stdlib.h>  

int least(int* p,int n,int v)

 {  int i,j,t,sum=0; 

 for(i=0;i<n-1;i++)  

 for(j=i+1;j<n;j++)   

 if(*(p+i)>*(p+j))  

      {     t=*(p+i);   

           *(p+i)=*(p+j);   

          *(p+j)=t;  

     } 

  i=n-1;

  j=0; 

 while(i>j) 

    {   t=*(p+i); 

  while((t=t+*(p+j))<=v)    

      j++;   

     sum++;  

     i--;  } 

     return sum; 
   }  

int main(void)

 {  int n,v,i; 

    int *p; 

    scanf("%d%d",&n,&v); 

    p=(int *)malloc(n*sizeof(int)); 

   for(i=0;i<n;i++)   

   scanf("%d",p+i);  

   printf("%d\n",least(p,n,v));  

  return 0;

 }

0 0