我是靠谱客的博主 呆萌丝袜,最近开发中收集的这篇文章主要介绍华为机试题目一(牛客网)HJ1:字符串最后一个单词的长度HJ2:计算某字母的出现次数HJ3:明明的随机数字符串分隔进制转换,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
HJ1:字符串最后一个单词的长度
我的代码
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
char str[5000];
int len=0;
char space=' ';
char *p; int start=0;
fgets(str,5001,stdin);
p=strrchr(str, space);
if(p){
p=p+2;
while(*(p+start)){
len++;
start++;
}
printf("%d",len);
}
else{
while(*(str+start)){
len++;
start++;
}
printf("%d",len-1);
}
return 0;
}
1:输入用的fgets,最开始我用gets报段错误;
2:strrchr函数用于定位需要的字符最后一次出现的位置;
多积累字符串函数
3:由于移动问题导致数据+2或者-1,这个我没有仔细去研究,纯粹看输出直接换算的,有时间可以认真研究一下这个移动步位问题。
HJ2:计算某字母的出现次数
我的代码
#include<stdio.h>
#include<string.h>
int main(){
char str[5000];
char c,cm;
int num=0,len=0,i=0;
fgets(str,5000,stdin);
c=getchar();
len=strlen(str);
if(c>=97){
cm=c-32;
}
else{
cm=c+32;
}
for(i=0;i<len;i++){
if(str[i]==c||str[i]==cm){
num++;
}
}
printf("%d",num);
return 0;
}
这道题算法很简单,但让我浪费了一些时间的是输入输出,由于牛客网的测试环境是循环测试的,一开始我的输入由于字符串的换行问题导致输出一直是num的初始化值。后来修改为图上代码后测试通过。
HJ3:明明的随机数
虽然题目是随机数,实际上跟随机数没什么关系。重点是掌握输入输出和数组。
我的代码
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
int num=0;
int p=0;
while(~scanf("%d",&num)){
int array[1000]={0};
for(int i=0;i<num;i++){
scanf("%d",&p);
array[p]=1;//数组用来标记
}
for(int i=0;i<1000;i++){
if(array[i]==1){
printf("%dn",i);
}
}
}
return 0;
}
这个代码中比较重要的部分有两点:
1:while(~scanf("%d",&num))
循环输入多组示例时用语句代表当没有输入时跳出循环,因为没有输入时scanf语句返回-1,用~取反后即为0,此时跳出while语句。
2:for(int i=0;i<num;i++){ scanf("%d",&p); array[p]=1;//数组用来标记 }
这里array数组是用来标记的,当遇到重复数字p时,由于与array数组中的元素冲突,重复不计入,注意输出的是数组下标,而不是数组元素,因为标记的元素都为1.
字符串分隔
我的代码
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char str[100]="