一. 简介
对牛客网华为机试题进行一下记录。
二. 牛客网华为机试题
1. 字符串最后一个单词的长度
题目说明
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。
(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
示例1
输入: hello nowcoder
输出: 8
代码实现如下:
#include <stdio.h>
#include <string.h>
int main(void)
{
char buffer[5000] = {0};
char* ptr = NULL;
int i = 0;
int len = 0;
int count = 0;
//从终端读取一行字符串
//fgets函数从文件或输入流中读取的字符串中存在换行符
//fgets()函数会将其包含在返回的字符串中,并将其视为一个字符。
fgets(buffer, 5000, stdin);
len = strlen(buffer)-1;
ptr = &buffer[len-1];
for(i=0; i<len; i++)
{
if(*ptr != ' ')
{
count++;
}
else
{
break;
}
ptr--;
}
printf("%d\n", count);
return 0;
}
2. 计算某字符出现次数
题目说明
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
数据范围: 1≤n≤1000 1≤n≤1000
输入描述:
第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。
输出描述:
输出输入字符串中含有该字符的个数。(不区分大小写字母)
示例1
输入:
ABCabc
A
输出:2
代码实现如下:
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1000] = {0};
char ch = '0';
int i = 0;
int count = 0;
scanf("%[^\n]\n", buf);//读入输入字符,遇到回车停止读入
scanf("%c", &ch);
for(i=0; i<strlen(buf); i++)
{
if( ((ch >='0') && (ch <='9')) && (ch == buf[i])) //字符为数字时
{
count++;
}
else if(((ch==buf[i])||(ch==(buf[i]+32))||(ch==(buf[i]-32))) && !(ch>='0'&&ch<='9'))
{
count++;
}
}
printf("%d\n", count);
return 0;
}
3. 明明的随机数
明明生成了NN个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
数据范围: 1≤n≤1000 1≤n≤1000 ,输入的数字大小满足 1≤val≤500 1≤val≤500
输入描述:
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。
输出描述:
输出多行,表示输入数据处理后的结果
代码实现如下:
#include <stdio.h>
int main(void)
{
int n, i = 0;
int num = 0;
int check[1000] = {0};
scanf("%d", &n);
//以数组下标来存储随机数
//下标对应的数组值为1,来说明是否是存储的随机数
for(i=0; i<n; i++)
{
scanf("%d", &num);
check[num] = 1;
}
for (i=0; i<1000; i++)
{
if (check[i] == 1)
{
printf("%d\n", i);
}
}
return 0;
}