写在开始
因为需要,先不写学习笔记,最近几次写一写准备面试时基础但是细节的题目(练习题)。
注:
这是牛客网上面做的华为机试.在线训练题目,代码肯定是我自己写的,即使是很简单的!
题目
第一题
题目描述
计算字符串最后一个单词的长度,单词以空格隔开。
输入描述:一行字符串,非空,长度小于5000。
输出描述:整数N,最后一个单词的长度。
示例1:
输入:hello world
输出:5
代码
#include<stdio.h>
int main()
{
char str[5000];
int length=0;
gets(str);
for(int i=strlen(str)-1;i>=0;i--){
if((int)str[i]!=32){
length++;
}
else{
break;
}
}
printf("%d",length);
return 0;
}
第二题
题目描述
写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
输入描述:
第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。
输出描述:
输出输入字符串中含有该字符的个数。
示例1:
输入:
ABCDEF
A
输出:
1
代码
#include<stdio.h>
int main()
{
char str[1000];
char flag;
int num=0;
gets(str);
scanf("%c",&flag);
int number=(int)flag;
if(65<=number&&number<=90){
for(int i=0;i<strlen(str);i++){
if(flag==str[i]||flag+32==str[i]){
num++;
}
}
}
else if(97<=number&&number<=122){
for(int i=0;i<strlen(str);i++){
if(flag==str[i]||flag-32==str[i]){
num++;
}
}
}
else{
for(int i=0;i<strlen(str);i++){
if(flag==str[i]){
num++;
}
}
}
printf("%d",num);
return 0;
}
第三题
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
样例输入解释:
11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。
输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数
输出描述:
返回多行,处理后的结果
示例1:
输入:
11
10
20
40
32
67
40
20
89
300
400
15
输出:
10
15
20
32
40
67
89
300
400
注:
1.原题是多组输入但是我实在没读懂题目,就暂且按照一组处理
2.代码写得很糟糕:算法全“穷举式”,命名不好。。。。。。请见谅
代码
#include<stdio.h>
//#include<string.h>
int N;
int arr[1000]={0};
void sigle();//查重
void line();//排序并输出
int main()
{
//memset(arr,0,sizeof(arr));//原题本来是多组数据,题意不清楚,这里定为一组
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&arr[i]);
}
sigle();
line();
}
//查重
void sigle()
{
for(int i=0;i<N-1;i++){
if(arr[i]!=0){
for(int j=i+1;j<N;j++){
if(arr[i]==arr[j]){
arr[j]=0;
}
}
}
}
}
//排序并输出
void line()
{
//将0的位置填满
int flag=0;
for(int i=0;i<N;i++){
if(arr[i]!=0){
if(flag==i){
flag++;
}
else{
arr[flag]=arr[i];
flag++;
arr[i]=0;
}
}
}
if(arr[flag]==0){
flag--;
}
//排序
int min,min_number;
for(int i=0;i<flag;i++){
min=i;
for(int j=i+1;j<=flag;j++){
if(arr[min]>arr[j]){
min=j;
}
}
min_number=arr[min];
arr[min]=arr[i];
arr[i]=min_number;
}
for(int i=0;i<=flag;i++){
printf("%d\n",arr[i]);
}
}
第四题
题目描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
示例1:
输入:
abc
123456789
输出:
abc00000
12345678
90000000
代码
#include<stdio.h>
#include<string.h>
//函数声明
void out(char str[100]);
int main()
{
char str1[100];
char str2[100];
fflush(stdin);
gets(str1);
fflush(stdin);
gets(str2);
out(str1);
out(str2);
return 0;
}
//输入:一个字符串数组
//目的:将字符串数组按照题目要求输出
void out(char str[100])
{
int length=strlen(str);
int sign=0;
loop:
if((length-sign)<=8){
for(int i=0;i<length-sign;i++){
printf("%c",str[sign+i]);
}
for(int i=length-sign;i<8;i++){
printf("0");
}
printf("\n");
}
else{
for(int i=0;i<8;i++){
printf("%c",str[sign+i]);
}
printf("\n");
sign=sign+8;
goto loop;
}
}