晚上参加了华为 2017 暑期实习生的校招笔试,题目不难,但本渣渣也只做了两个题,再次记录下,帮助下后来者。
一共三个题,第一个题是输入两个在 1~70000 之间的数,将两个数逆序后求和。
其中对于 100,200,逆序后变为 1 和 2,大概就是这样。
之后贴 lz 的答案:
#include <stdio.h>
#include <math.h>
int reverseAdd(int a,int b);
int getWei(int m){
int digit=0;
for(;m;m/=10) digit++;
return digit;
}
double getInt(int n,int digit){
return n * pow(10,digit);
}
int reverseNumber(int a){
int num1,i,digit1;
int sum1=0;
int n=0;
num1 = a;
digit1 = getWei(a);
for(;digit1>=1;digit1--){
n = num1 % 10;
sum1 = sum1 + getInt(n,digit1-1);
num1 /=10;
}
return sum1;
}
int reverseAdd(int a,int b){
a=reverseNumber(a);
b=reverseNumber(b);
//printf("%d\n",a);
//printf("%d\n",b);
return a+b;
}
int main(int argc, char *argv[]) {
int a,b;
int c = 0;
scanf("%d,%d",&a,&b);
c=reverseAdd(a,b);
printf("%d\n",c);
}
第二题 lz 截了图,也不知道算不算违规
#include <stdio.h>
#include <string.h>
void swap(int* a,int* b)
{
int t;
t=*a; *a=*b; *b=t;
}
int main(int argc, char *argv[]) {
int s[6]={1,2,3,4,5,6};
char str[51];
int i=0;
int j=0;
scanf("%s",str);
for (i=0;i<strlen(str);i++) {
switch (str[i]) {
case 'L':
{
swap(&s[0], &s[5]);
swap(&s[1], &s[4]);
swap(&s[0], &s[1]);
}
//printf("%c",str[i]);
break;
case 'R':
{
swap(&s[1], &s[5]);
swap(&s[0], &s[4]);
swap(&s[1], &s[0]);
}
//printf("%c",str[i]);
break;
case 'F':
{
swap(&s[2], &s[5]);
swap(&s[3], &s[4]);
swap(&s[2], &s[3]);
}
//printf("%c",str[i]);
break;
case 'B':
{
swap(&s[3], &s[5]);
swap(&s[2], &s[4]);
swap(&s[3], &s[2]);
}
//printf("%c",str[i]);
break;
case 'A':
{
swap(&s[2], &s[1]);
swap(&s[3], &s[0]);
swap(&s[2], &s[3]);
}
//printf("%c",str[i]);
break;
case 'C':
{
swap(&s[2], &s[0]);
swap(&s[3], &s[1]);
swap(&s[2], &s[3]);
}
//printf("%c",str[i]);
break;
}
}
//printf("%s",str);
for (j=0;j<6;j++) {
printf("%d",s[j]);
}
}
到了第三题就只剩十分钟了,lz 也没啥心思看