一. 简介
对牛客网华为机试题进行一下记录。
二. 牛客网华为机试题
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;
}