华为校招上机题

时间:2021-04-17 18:53:52

1.兔子爬洞问题:兔子白天爬出5米,晚上又掉下去2米。问给定洞的深度,兔子要爬多少天。
PS:有没有为兔子想过。。。   没事干嘛掉洞   

2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,其它字符和空格不算。然后把改好的存在另外一个数组里。

3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。

把第一个写出来了,但不知道那个输入参数如何弄
就是那个N


#include<iostream>
#include<memory.h>
using namespace std;

int main(int argc,char **argv)
{
char *ch=argv[1];
int n = (int)(*ch);
n=n-48;
// int n=*argv[1].
cout<<"n="<<n<<endl;
int l=0;
int day=1;
while(l<n)
{
//白天
l=l+5;
if(l>=n)
{
cout<<"l="<<l<<endl;
break;
}
else
{
l=l-2;
}
day=day+1;
cout<<"day="<<day<<endl;
}
cout<<"一共用"<<day<<"天";
return 0;
}

75 个解决方案

#1




#include<iostream>
#include<memory.h>
using namespace std;
int str2int(const char *str);
int main(int argc,char **argv)
{
// char *ch=argv[1];
//int n = (int)(*ch);
//n=n-48;
int n=str2int(argv[1]);
cout<<"n="<<n<<endl;
int l=0;
int day=1;
while(l<n)
{
//白天
l=l+5;
if(l>=n)
{
cout<<"l="<<l<<endl;
break;
}
else
{
l=l-2;
}
day=day+1;
cout<<"day="<<day<<endl;
}
cout<<"一共用"<<day<<"天";
return 0;
}

int str2int(const char *str)
{
int temp=0;
const char *ptr=str;//ptr保存str字符串头

if(*str == '-' || *str =='+' )
{
str++;
}
while(*str !=0)
{
if((*str <'0')||(*str >'9'))
{
break;//当当前字符不是数字,退出循环
}

temp=temp*10+(*str-'0');//如果当前字符是数字就当数值计算
str++;
}
if(*ptr =='-')//如果字符串是以'-'开头,转换成其相反数
{
temp=-temp;
}
return temp;
}

#2




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;

int i,j;

scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));

j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}

for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}

#3



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;

int i,j;

scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));

j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}

for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}

#4


第一题的PS应该是,兔子爬的什么洞?兔子如何爬动的?兔子能爬动么?这么大只兔子,爬一白天,就爬了5米?这两米怎么掉下去的?谁想出来的,把 蜗牛改成 兔子

#5


华为校招上机题

#6


我也觉得好玩,很小的时候暑假作业上都是蜗牛爬的问题,现在弄成兔子了、

#7


第一题,设兔子洞深为n米,则需要n/3天。

#8


第二题:
//数组a和b中保存乘数和被乘数,r的长度为len_a+len_b,保存结果。
void q_array_multiply(const int *a, int len_a, const int *b, int len_b, int *r)
{
int r_len = len_b+len_a;
memset(r, 0, r_len*sizeof(int));
for (int a_count=len_a-1; a_count>-1; --a_count)
{
for (int b_count=len_b-1; b_count>-1; --b_count)
{
r[a_count+b_count+1] += a[a_count]*b[b_count];
}
}
for (int r_count=r_len-1; r_count>0; --r_count)
{
r[r_count-1] += r[r_count]/10;
r[r_count] = r[r_count]%10;
}
}

#9


引用 7 楼 smsgreenlife 的回复:
第一题,设兔子洞深为n米,则需要n/3天。

要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天

#10


引用 9 楼 elegant87 的回复:
引用 7 楼 smsgreenlife 的回复:

第一题,设兔子洞深为n米,则需要n/3天。

要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天

大于5米需要n/3 天

#11


该回复于2012-03-06 20:58:30被版主删除

#12


这题目挺好玩的!

#13



//第二题
void changeWord(char *src,char* des)
{
     cout<<src<<endl;
     char * s = src;
     while(*s!='\0')
     {
        if(*s>='A' && *s<='Z')
          *s ^= 0x20;
        else
          if(*s>='a' && *s<='z')
            *s ^= 0x20;
         s++;
     }
     cout<<src<<endl;
     memcpy(des,src,strlen(src)+1);
}

#14


高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果

可以用数组,因为一个参数是0-9之间
可以考虑用循环,将乘法改为加法运算

#15



//只考虑正整数

char* largerMul(char* m,uint n)
{
      
      uint step = 0;
      char * ret = new char(strlen(m)+2);
      char *p = ret;
      char *t = m;
      uint r;
      while(*t != '\0')
      {
          r  = n* (*t^0x30)+step;
          *p = r%10 ^ 0x30;
          step = r/10;
          ++t;
          ++p;
      }
      if(step)
      {
         *p = step ^ 0x30;
         p++;
      }
      *p='\0';
      
      for(int i=0;i<strlen(ret)/2;++i)
      {
         char temp = ret[i];
         ret[i] = ret[strlen(ret)-i-1];
         ret[strlen(ret)-i-1] = temp;
      }
      return ret;
}

#16


不错,科技自己玩玩

#17




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void strchange(const char *src,char *des)
{
    while(*src)
    {
        if (*src>='a'&& *src<='z')
        {
            *des = *src - 'a' + 'A';
        }
        else if(*src>='A'&& *src<='Z')
        {
            *des= *src + 'a'-'A';
        }
des++;
src++;
    }
}

int main()
{
//printf("%d",'a'-'A');
    char strTest[100];
    scanf("%s",strTest);
    char strResult[100];
    strchange(strTest,strResult);
    printf("%s",strResult);
    return 0;
}

#18


//1.兔子爬洞问题:兔子白天爬出5米,晚上又掉下去2米。 

//  问给定洞的深度,兔子要爬多少天。

#include<stdio.h>

int day_to_out(int deep)
{
if(deep <= 5)
return 1;
else
return day_to_out(deep - 3) + 1;
}

int main(int argc, char *argv[])
{
int deep;
printf("please input the deep of the hole: ");
scanf("%d", &deep);

printf("she need %d day(s) to get out of the hole\n", day_to_out(deep));

return 0;
}
//2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,
//  其它字符和空格不算。然后把改好的存在另外一个数组里。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 50
int main(int argc, char *argv[])
{
char *src = "hElLo, 2012w@OrLd";
char dest[MAX];
int index = 0;

while(*src)
{
if(*src >= 97 && *src <= 122)
{
dest[index++] = *src - 32;
}
else if( *src >= 65 && *src <= 90)
{
dest[index++] = *src + 32;
}
else
{
dest[index++] = *src;
}
src++;
}
dest[index] = '\0';
printf("%s\n", dest);
return 0;
}
//3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。

#include<stdio.h>
#include<string.h>

#define MAX 64
int main(int argc, char *argv[])
{
char num_1[MAX];
int num_2;

char ret[MAX + 2]; // save the result
int len;
int b = 0;         // 进位
int temp = 0;
int index = 0;


printf("please input two number: ");
scanf("%s %d", num_1, &num_2);

len = strlen(num_1);

index = len;
ret[index + 1] = '\0';

char *p = num_1 + len - 1;

while(len--)
{
temp = ((*p - '0') * num_2) + b;

ret[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');

b = (temp - (temp % 10)) / 10;

p--;
}
ret[index] = (char)(b + '0');

printf("%s * %d equals %s\n", num_1, num_2, (b > 0 ? ret + index : ret + index + 1));
return 0;
}

#19


第一个问题应该是蜗牛爬洞还说的过去,一看就是变态出的没脑子的题!!

#20


大于5米的我想应该是这样:
白天 = 0.5天

如果是x米,当x-3*n <= 5 时 跳出循环,
跳出的天数 是 (n+0.5)天。

#21


第一题:

if(N%3 == 0)
{
  return N/3;
}else
{
  return N/3+1;
}

华为校招上机题

#22


第一题 假设天数为n. 深度为len, 兔子最后一次爬m。
则有:
3(n - 1) + m = len (len >= 3)
不难得出,当len >= 3时,最后一次爬的长度肯定会超过5。
所以,3(n - 1) = len - m(m = 3, 4, 5)

n = (len - m)/3  (m = 0,1,2)
即 n = len / 3 (len >= 3) 

所以答案是:
1         len = 1,2

n =  len / 3   len >= 3

#23


第一题:
void rabit_go_go_go(void)
{
int deep = 10;
int p_up = 5;
int p_down = 2;
int day = (int)((float)(deep - p_up)/(p_up - p_down) + 0.5) + 1;
printf("day=%d...\n", day);
return;
}

#24


1.第一题
int sum=0;//洞的深度
int duzi=0;//兔子每天爬出距离
cout<<"情输入洞的深度:";
cin>>sum;
int i=0;//记录天数
while(duzi<sum)
{
duzi+=5;
if(duzi>=sum)
{
cout<<"总共花了"<<i+1<<"天才爬出"<<endl;
break;
}
i++;
duzi-=2;
}

2.第二题
char* fun(char a[])
{
char* p=a;
    for(;*p!=0;p++)
{
if(*p>=97 && *p<=122)
{
*p-=32;
}
else if(*p>=65 && *p<=90)
{
*p+=32;
}
}

return a;
}

#25


第二题:
char letters[128];
void letters_init(void)
{
static int letters_init_done = 0;
if(letters_init_done) return;
int i;
for(i=0; i<128; ++i) {
if(i>='a' && i<='z') {
letters[i] = i-32;
} else if(i>='A' && i<='Z') {
letters[i] = i+32;
} else {
letters[i] = i;
}
}
letters_init_done = 1;
return;
}
char *letter_convert(char *dst, const char *src)
{
char *tmp = (char *)dst;
do {
*dst++ = letters[(int)*src];
} while('\0' != *src++);
printf("convert result=%s...\n", tmp);
return tmp;
}

#26


23楼写的不错啊

#27


引用 25 楼 gdujian0119 的回复:
第二题:C/C++ code
char letters[128];
void letters_init(void)
{
    static int letters_init_done = 0;
    if(letters_init_done) return;
    int i;
    for(i=0; i<128; ++i) {
        if(i>='a' &amp;&amp;……
我写的测试程序和这个略不同,改一下:char *letter_convert(char *dst, const char *src)开始调用一次void letters_init(void)。

#28


23楼写的不错啊

#29


第三题:
char ret_tmp[9][9];
void product_init(void)
{
static int product_init_done = 0;
if(product_init_done) return;
int i;
int j;
for(i=0; i<10; ++i) {
for(j=0; j<10; ++j) {
ret_tmp[i][j] = i*j;
}
}
product_init_done = 1;
}
char *product(char *dst, const char *one, char two)
{
int ret;
int carry = 0;
char *cp = (char *)(one + strlen(one) - 1);
char tmp[128];
char *tp = tmp+127;
*tp = '\0';
while(cp>=one) {
ret = ret_tmp[*cp-'0'][two-'0'];
ret += carry;
carry = ret/10;
*--tp = ret%10+'0';
--cp;
}
if(carry) {
*--tp = carry + '0';
}
strcpy(dst, tp);
return dst;
}

int main(int argc, char *argv[])
{
char one[64] = "987654321";
char two = '2';
char result[128];
product_init();
printf("product=%s...\n", product(result, one, two));
return 0;
}

#30


1: n / 3
2: 
if (int[i] >= 'a' && int[i] <= 'z')
{
    int[i] -= 32;
}
else (int[i] >= 'A' && int[i] <= 'Z')
{
    int[i] += 32;
}
3: 汇编方法

#31


华为也靠这种题??

#32


头像显示小猪爬杆,跟第一题很合拍,哈哈
引用 31 楼 babilife 的回复:
华为也靠这种题??

#33


以下是兔子爬洞的模拟代码::)

<?php
function crawl($L,$l_d=5,$l_n=-2){
$time=array();
$time['day']=0;
$time['night']=0;
$left=$L;

while($left>0){
$left=$left-$l_d;
$time['day']++;

if($left<=0)
break;

$left=$left-$l_n;
$time['night']++;

if($left<=0)
break;
}

return $time;
}

print_r(crawl(7));
?>

#34


不过如此啊。各位去看看NOIP的复赛题。我都不提NOI,提那们算是欺负你们。

#35


第一题:#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{int h,n;
cout<<"请输入这个洞的深度:"<<endl;
cin>>h;
for(n=1;;n++){
int h1=5*n-2*(n-1);//heigh in day;
    int h2=3*n;//heigh in night
if(h1>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
if(h2>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
}
return 0;
}

#36


1:
int height;
int days = 0;
cin >> height;
while(height >5)
{
    days++;
    height -= 3;
}

cout << "need to spend " << days << " days" << endl;

#37


引用 36 楼 michealxqh 的回复:
1:
int height;
int days = 0;
cin >> height;
while(height >5)
{
  days++;
  height -= 3;
}

cout << "need to spend " << days << " days" << endl;


int days = 0; 改为 int days = 1;

#38


引用 1 楼 zqt520 的回复:
貌似有个问题:洞深应该是float类型,例如洞深是5.5m,那就不对了。
C/C++ code



#include<iostream>
#include<memory.h>
using namespace std;
int str2int(const char *str);
int main(int argc,char **argv)
{
//    char *ch=argv[1];
    //int n = (int)(*ch);
  ……

#39


引用 9 楼 elegant87 的回复:
引用 7 楼 smsgreenlife 的回复:

第一题,设兔子洞深为n米,则需要n/3天。

要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天



好像不对吧,大于5m时,假如是7m,那7/3+1=3天吗,实际上只需2天呀

#40


当洞深h<=5m时,天数day=1;
当洞深h>5m,并且h是整数,天数day=h/3;
当洞深h>5m,h是浮点数(即h>h的整数部分,不包含小数部分都是0的浮点数),并且(h的整数部分-5)/3==0,则天数=h/3+1

不知小生的算法对不对,求释
  

#41


设兔子洞深为n米,兔子白天向上爬a米,晚上掉下来b米,则需要(n-(b+1))/(a-b)+1天,这个可以证明,你们自己证明一下吧。

#42


引用 41 楼 smsgreenlife 的回复:
设兔子洞深为n米,兔子白天向上爬a米,晚上掉下来b米,则需要(n-(b+1))/(a-b)+1天,这个可以证明,你们自己证明一下吧。


n=8.5m,a=5m,b=2m, 结果是2天,对?

#43


只写了第一题,后面没看

#include <stdio.h>

int main(void)
{
int days;
int depth;

scanf("%d", &depth);

if (depth <= 5)
{
days = 1;
}
else
{
int x = (depth - 5) % 3 ? 1 : 0;

days = (depth - 5) / 3 + 1 + x;
}

printf("%d\n", days);

return 0;
}

#44


该回复于2012-03-08 08:58:18被版主删除

#45



用java写的递归,更简单。
import java.io.*;

public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}

}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);

String s=ir.readLine();
int len=Integer.parseInt(s);

System.out.println(len);
int day=1;

Cac(day,len);


}

}

#46



用java写的递归,更简单。用C也行
import java.io.*;

public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}

}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);

String s=ir.readLine();
int len=Integer.parseInt(s);

System.out.println(len);
int day=1;

Cac(day,len);


}

}

#47


蜗牛爬洞

#48


引用 32 楼 funywork 的回复:
头像显示小猪爬杆,跟第一题很合拍,哈哈引用 31 楼 babilife 的回复:

华为也靠这种题??

华为校招上机题
华为是可以上csdn的,说不定就是看了这头像,来了灵感

#49


这些题目 很有意思的

#50


第3题
 

#include<stdio.h>
#define  MAX  64

int main(char argc,char **argv)
{
 char num1[MAX]={0};
 long int num2 = 0;
 printf("sizeof(long int) =%d\n",sizeof(long int));
 
 scanf("%s",num1);
  scanf("%d",&num2);
 printf("num=%s num2=%d\n",num1,num2);
 int len =0;
 int i = 0;
 len =strlen(num1);
 int index =len;
 int  b=  0;
 char sum3[index+1];
 char *p=NULL;
 p=num1+len-1;
 int  temp = 0 ;
 while(len)
 {
  temp=(num1[--len]-'0')*num2+b;
  sum3[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
if(len== 0)
{
  temp=b;
    sum3[index] = temp + '0';
  }
 }
 printf("sum=%s\n",sum3);
 return 0;
}

#1




#include<iostream>
#include<memory.h>
using namespace std;
int str2int(const char *str);
int main(int argc,char **argv)
{
// char *ch=argv[1];
//int n = (int)(*ch);
//n=n-48;
int n=str2int(argv[1]);
cout<<"n="<<n<<endl;
int l=0;
int day=1;
while(l<n)
{
//白天
l=l+5;
if(l>=n)
{
cout<<"l="<<l<<endl;
break;
}
else
{
l=l-2;
}
day=day+1;
cout<<"day="<<day<<endl;
}
cout<<"一共用"<<day<<"天";
return 0;
}

int str2int(const char *str)
{
int temp=0;
const char *ptr=str;//ptr保存str字符串头

if(*str == '-' || *str =='+' )
{
str++;
}
while(*str !=0)
{
if((*str <'0')||(*str >'9'))
{
break;//当当前字符不是数字,退出循环
}

temp=temp*10+(*str-'0');//如果当前字符是数字就当数值计算
str++;
}
if(*ptr =='-')//如果字符串是以'-'开头,转换成其相反数
{
temp=-temp;
}
return temp;
}

#2




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;

int i,j;

scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));

j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}

for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}

#3



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;

int i,j;

scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));

j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}

for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}

#4


第一题的PS应该是,兔子爬的什么洞?兔子如何爬动的?兔子能爬动么?这么大只兔子,爬一白天,就爬了5米?这两米怎么掉下去的?谁想出来的,把 蜗牛改成 兔子

#5


华为校招上机题

#6


我也觉得好玩,很小的时候暑假作业上都是蜗牛爬的问题,现在弄成兔子了、

#7


第一题,设兔子洞深为n米,则需要n/3天。

#8


第二题:
//数组a和b中保存乘数和被乘数,r的长度为len_a+len_b,保存结果。
void q_array_multiply(const int *a, int len_a, const int *b, int len_b, int *r)
{
int r_len = len_b+len_a;
memset(r, 0, r_len*sizeof(int));
for (int a_count=len_a-1; a_count>-1; --a_count)
{
for (int b_count=len_b-1; b_count>-1; --b_count)
{
r[a_count+b_count+1] += a[a_count]*b[b_count];
}
}
for (int r_count=r_len-1; r_count>0; --r_count)
{
r[r_count-1] += r[r_count]/10;
r[r_count] = r[r_count]%10;
}
}

#9


引用 7 楼 smsgreenlife 的回复:
第一题,设兔子洞深为n米,则需要n/3天。

要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天

#10


引用 9 楼 elegant87 的回复:
引用 7 楼 smsgreenlife 的回复:

第一题,设兔子洞深为n米,则需要n/3天。

要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天

大于5米需要n/3 天

#11


该回复于2012-03-06 20:58:30被版主删除

#12


这题目挺好玩的!

#13



//第二题
void changeWord(char *src,char* des)
{
     cout<<src<<endl;
     char * s = src;
     while(*s!='\0')
     {
        if(*s>='A' && *s<='Z')
          *s ^= 0x20;
        else
          if(*s>='a' && *s<='z')
            *s ^= 0x20;
         s++;
     }
     cout<<src<<endl;
     memcpy(des,src,strlen(src)+1);
}

#14


高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果

可以用数组,因为一个参数是0-9之间
可以考虑用循环,将乘法改为加法运算

#15



//只考虑正整数

char* largerMul(char* m,uint n)
{
      
      uint step = 0;
      char * ret = new char(strlen(m)+2);
      char *p = ret;
      char *t = m;
      uint r;
      while(*t != '\0')
      {
          r  = n* (*t^0x30)+step;
          *p = r%10 ^ 0x30;
          step = r/10;
          ++t;
          ++p;
      }
      if(step)
      {
         *p = step ^ 0x30;
         p++;
      }
      *p='\0';
      
      for(int i=0;i<strlen(ret)/2;++i)
      {
         char temp = ret[i];
         ret[i] = ret[strlen(ret)-i-1];
         ret[strlen(ret)-i-1] = temp;
      }
      return ret;
}

#16


不错,科技自己玩玩

#17




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void strchange(const char *src,char *des)
{
    while(*src)
    {
        if (*src>='a'&& *src<='z')
        {
            *des = *src - 'a' + 'A';
        }
        else if(*src>='A'&& *src<='Z')
        {
            *des= *src + 'a'-'A';
        }
des++;
src++;
    }
}

int main()
{
//printf("%d",'a'-'A');
    char strTest[100];
    scanf("%s",strTest);
    char strResult[100];
    strchange(strTest,strResult);
    printf("%s",strResult);
    return 0;
}

#18


//1.兔子爬洞问题:兔子白天爬出5米,晚上又掉下去2米。 

//  问给定洞的深度,兔子要爬多少天。

#include<stdio.h>

int day_to_out(int deep)
{
if(deep <= 5)
return 1;
else
return day_to_out(deep - 3) + 1;
}

int main(int argc, char *argv[])
{
int deep;
printf("please input the deep of the hole: ");
scanf("%d", &deep);

printf("she need %d day(s) to get out of the hole\n", day_to_out(deep));

return 0;
}
//2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,
//  其它字符和空格不算。然后把改好的存在另外一个数组里。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 50
int main(int argc, char *argv[])
{
char *src = "hElLo, 2012w@OrLd";
char dest[MAX];
int index = 0;

while(*src)
{
if(*src >= 97 && *src <= 122)
{
dest[index++] = *src - 32;
}
else if( *src >= 65 && *src <= 90)
{
dest[index++] = *src + 32;
}
else
{
dest[index++] = *src;
}
src++;
}
dest[index] = '\0';
printf("%s\n", dest);
return 0;
}
//3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。

#include<stdio.h>
#include<string.h>

#define MAX 64
int main(int argc, char *argv[])
{
char num_1[MAX];
int num_2;

char ret[MAX + 2]; // save the result
int len;
int b = 0;         // 进位
int temp = 0;
int index = 0;


printf("please input two number: ");
scanf("%s %d", num_1, &num_2);

len = strlen(num_1);

index = len;
ret[index + 1] = '\0';

char *p = num_1 + len - 1;

while(len--)
{
temp = ((*p - '0') * num_2) + b;

ret[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');

b = (temp - (temp % 10)) / 10;

p--;
}
ret[index] = (char)(b + '0');

printf("%s * %d equals %s\n", num_1, num_2, (b > 0 ? ret + index : ret + index + 1));
return 0;
}

#19


第一个问题应该是蜗牛爬洞还说的过去,一看就是变态出的没脑子的题!!

#20


大于5米的我想应该是这样:
白天 = 0.5天

如果是x米,当x-3*n <= 5 时 跳出循环,
跳出的天数 是 (n+0.5)天。

#21


第一题:

if(N%3 == 0)
{
  return N/3;
}else
{
  return N/3+1;
}

华为校招上机题

#22


第一题 假设天数为n. 深度为len, 兔子最后一次爬m。
则有:
3(n - 1) + m = len (len >= 3)
不难得出,当len >= 3时,最后一次爬的长度肯定会超过5。
所以,3(n - 1) = len - m(m = 3, 4, 5)

n = (len - m)/3  (m = 0,1,2)
即 n = len / 3 (len >= 3) 

所以答案是:
1         len = 1,2

n =  len / 3   len >= 3

#23


第一题:
void rabit_go_go_go(void)
{
int deep = 10;
int p_up = 5;
int p_down = 2;
int day = (int)((float)(deep - p_up)/(p_up - p_down) + 0.5) + 1;
printf("day=%d...\n", day);
return;
}

#24


1.第一题
int sum=0;//洞的深度
int duzi=0;//兔子每天爬出距离
cout<<"情输入洞的深度:";
cin>>sum;
int i=0;//记录天数
while(duzi<sum)
{
duzi+=5;
if(duzi>=sum)
{
cout<<"总共花了"<<i+1<<"天才爬出"<<endl;
break;
}
i++;
duzi-=2;
}

2.第二题
char* fun(char a[])
{
char* p=a;
    for(;*p!=0;p++)
{
if(*p>=97 && *p<=122)
{
*p-=32;
}
else if(*p>=65 && *p<=90)
{
*p+=32;
}
}

return a;
}

#25


第二题:
char letters[128];
void letters_init(void)
{
static int letters_init_done = 0;
if(letters_init_done) return;
int i;
for(i=0; i<128; ++i) {
if(i>='a' && i<='z') {
letters[i] = i-32;
} else if(i>='A' && i<='Z') {
letters[i] = i+32;
} else {
letters[i] = i;
}
}
letters_init_done = 1;
return;
}
char *letter_convert(char *dst, const char *src)
{
char *tmp = (char *)dst;
do {
*dst++ = letters[(int)*src];
} while('\0' != *src++);
printf("convert result=%s...\n", tmp);
return tmp;
}

#26


23楼写的不错啊

#27


引用 25 楼 gdujian0119 的回复:
第二题:C/C++ code
char letters[128];
void letters_init(void)
{
    static int letters_init_done = 0;
    if(letters_init_done) return;
    int i;
    for(i=0; i<128; ++i) {
        if(i>='a' &amp;&amp;……
我写的测试程序和这个略不同,改一下:char *letter_convert(char *dst, const char *src)开始调用一次void letters_init(void)。

#28


23楼写的不错啊

#29


第三题:
char ret_tmp[9][9];
void product_init(void)
{
static int product_init_done = 0;
if(product_init_done) return;
int i;
int j;
for(i=0; i<10; ++i) {
for(j=0; j<10; ++j) {
ret_tmp[i][j] = i*j;
}
}
product_init_done = 1;
}
char *product(char *dst, const char *one, char two)
{
int ret;
int carry = 0;
char *cp = (char *)(one + strlen(one) - 1);
char tmp[128];
char *tp = tmp+127;
*tp = '\0';
while(cp>=one) {
ret = ret_tmp[*cp-'0'][two-'0'];
ret += carry;
carry = ret/10;
*--tp = ret%10+'0';
--cp;
}
if(carry) {
*--tp = carry + '0';
}
strcpy(dst, tp);
return dst;
}

int main(int argc, char *argv[])
{
char one[64] = "987654321";
char two = '2';
char result[128];
product_init();
printf("product=%s...\n", product(result, one, two));
return 0;
}

#30


1: n / 3
2: 
if (int[i] >= 'a' && int[i] <= 'z')
{
    int[i] -= 32;
}
else (int[i] >= 'A' && int[i] <= 'Z')
{
    int[i] += 32;
}
3: 汇编方法

#31


华为也靠这种题??

#32


头像显示小猪爬杆,跟第一题很合拍,哈哈
引用 31 楼 babilife 的回复:
华为也靠这种题??

#33


以下是兔子爬洞的模拟代码::)

<?php
function crawl($L,$l_d=5,$l_n=-2){
$time=array();
$time['day']=0;
$time['night']=0;
$left=$L;

while($left>0){
$left=$left-$l_d;
$time['day']++;

if($left<=0)
break;

$left=$left-$l_n;
$time['night']++;

if($left<=0)
break;
}

return $time;
}

print_r(crawl(7));
?>

#34


不过如此啊。各位去看看NOIP的复赛题。我都不提NOI,提那们算是欺负你们。

#35


第一题:#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{int h,n;
cout<<"请输入这个洞的深度:"<<endl;
cin>>h;
for(n=1;;n++){
int h1=5*n-2*(n-1);//heigh in day;
    int h2=3*n;//heigh in night
if(h1>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
if(h2>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
}
return 0;
}

#36


1:
int height;
int days = 0;
cin >> height;
while(height >5)
{
    days++;
    height -= 3;
}

cout << "need to spend " << days << " days" << endl;

#37


引用 36 楼 michealxqh 的回复:
1:
int height;
int days = 0;
cin >> height;
while(height >5)
{
  days++;
  height -= 3;
}

cout << "need to spend " << days << " days" << endl;


int days = 0; 改为 int days = 1;

#38


引用 1 楼 zqt520 的回复:
貌似有个问题:洞深应该是float类型,例如洞深是5.5m,那就不对了。
C/C++ code



#include<iostream>
#include<memory.h>
using namespace std;
int str2int(const char *str);
int main(int argc,char **argv)
{
//    char *ch=argv[1];
    //int n = (int)(*ch);
  ……

#39


引用 9 楼 elegant87 的回复:
引用 7 楼 smsgreenlife 的回复:

第一题,设兔子洞深为n米,则需要n/3天。

要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天



好像不对吧,大于5m时,假如是7m,那7/3+1=3天吗,实际上只需2天呀

#40


当洞深h<=5m时,天数day=1;
当洞深h>5m,并且h是整数,天数day=h/3;
当洞深h>5m,h是浮点数(即h>h的整数部分,不包含小数部分都是0的浮点数),并且(h的整数部分-5)/3==0,则天数=h/3+1

不知小生的算法对不对,求释
  

#41


设兔子洞深为n米,兔子白天向上爬a米,晚上掉下来b米,则需要(n-(b+1))/(a-b)+1天,这个可以证明,你们自己证明一下吧。

#42


引用 41 楼 smsgreenlife 的回复:
设兔子洞深为n米,兔子白天向上爬a米,晚上掉下来b米,则需要(n-(b+1))/(a-b)+1天,这个可以证明,你们自己证明一下吧。


n=8.5m,a=5m,b=2m, 结果是2天,对?

#43


只写了第一题,后面没看

#include <stdio.h>

int main(void)
{
int days;
int depth;

scanf("%d", &depth);

if (depth <= 5)
{
days = 1;
}
else
{
int x = (depth - 5) % 3 ? 1 : 0;

days = (depth - 5) / 3 + 1 + x;
}

printf("%d\n", days);

return 0;
}

#44


该回复于2012-03-08 08:58:18被版主删除

#45



用java写的递归,更简单。
import java.io.*;

public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}

}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);

String s=ir.readLine();
int len=Integer.parseInt(s);

System.out.println(len);
int day=1;

Cac(day,len);


}

}

#46



用java写的递归,更简单。用C也行
import java.io.*;

public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}

}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);

String s=ir.readLine();
int len=Integer.parseInt(s);

System.out.println(len);
int day=1;

Cac(day,len);


}

}

#47


蜗牛爬洞

#48


引用 32 楼 funywork 的回复:
头像显示小猪爬杆,跟第一题很合拍,哈哈引用 31 楼 babilife 的回复:

华为也靠这种题??

华为校招上机题
华为是可以上csdn的,说不定就是看了这头像,来了灵感

#49


这些题目 很有意思的

#50


第3题
 

#include<stdio.h>
#define  MAX  64

int main(char argc,char **argv)
{
 char num1[MAX]={0};
 long int num2 = 0;
 printf("sizeof(long int) =%d\n",sizeof(long int));
 
 scanf("%s",num1);
  scanf("%d",&num2);
 printf("num=%s num2=%d\n",num1,num2);
 int len =0;
 int i = 0;
 len =strlen(num1);
 int index =len;
 int  b=  0;
 char sum3[index+1];
 char *p=NULL;
 p=num1+len-1;
 int  temp = 0 ;
 while(len)
 {
  temp=(num1[--len]-'0')*num2+b;
  sum3[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
if(len== 0)
{
  temp=b;
    sum3[index] = temp + '0';
  }
 }
 printf("sum=%s\n",sum3);
 return 0;
}