机试编程(二)
目录:
- 字符串最后一个单词的长度【华为机试】
- 明明的随机数【华为机试】
- 取近似值【华为机试】
- 合并表记录【华为机试】
- 提取不重复的整数【华为机试】
- 句子逆序【华为机试】
- 字串的连接最长路径查找【华为机试】
- 进制转换【华为机试】
- 识别有效的IP地址和掩码并进行分类统计【华为机试】
- 密码验证合格程序【华为机试】
1、题目描述:计算字符串最后一个单词的长度,单词以空格隔开。【华为机试】
- 输入格式:一行字符串,非空,长度小于5000。
- 输出格式:整数N,最后一个单词的长度。
- 样例输入:
- hello world
- 样例输出:
- 5
示例代码:
#include <stdio.h>
#include <string.h>
int main(){
char inputStr[5000];
while(gets(inputStr)){
char *p = NULL;
if((p = strrchr(inputStr, ' ')) != NULL){
printf("%d\n", strlen(p + 1));
}else{
printf("%d\n", strlen(inputStr));
}
}
return 0;
}
2、题目描述:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。【华为机试】
- 输入格式:输入多行,先输入随机整数的个数,再输入相应个数的整数
- 输出格式:返回多行,处理后的结果
- 样例输入:
- 3
- 2
- 2
- 1
- 11
- 10
- 20
- 40
- 32
- 67
- 40
- 20
- 89
- 300
- 400
- 15
- 样例输出:
- 1
- 2
- 10
- 15
- 20
- 32
- 40
- 67
- 89
- 300
- 400
示例代码1:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}Node;
//创建结点
Node* createNode(int data, Node* next){
Node *newNode = (Node *)malloc(sizeof(Node));
if(!newNode){
printf("memory allocation error.\n");
exit(-1);
}
newNode->data = data;
newNode->next = next;
return newNode;
}
int main(){
int N;
while(scanf("%d", &N) != EOF){
int input;
Node *p = NULL, *prev = NULL, *head = NULL;
head = createNode(0, NULL); //创建头结点和输入第一个数
for(int i = 0; i < N; i++){ //遍历待输入数
scanf("%d", &input);
p = head;
prev = head;
while(p){
if(p->next == NULL && input > p->data){//待输入数为列表最后一个数
Node *node = createNode(input, NULL);
p->next = node;
break;
}
if(input == p->data){ //待输入数等于当前节点值
break;
}else if(input < p->data){ //待输入数小于当前节点值
Node *newNode = createNode(input, p);
prev->next = newNode;
break;
}else{ //待输入数大于当前节点值
prev = p;
p = p->next;
}
}
}
p = head;
while(head->next){
printf("%d\n", head->next->data);
head = head->next;
}
free(p);
}
return 0;
}
示例代码2:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1010
int main(){
int input, N;
while(scanf("%d", &N) != EOF){
int a[MAX_SIZE];
memset(a, 0, sizeof(a));
for(int i = 0; i < N; i++){
scanf("%d", &input);
a[input] = 1;
}
for(int i = 0; i < MAX_SIZE; i++){
if(a[i] == 1){
printf("%d\n", i);
}
}
}
return 0;
}
3、题目描述:写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。【华为机试】
- 输入格式:输入一个正浮点数值
- 输出格式:输出该数值的近似整数值
- 样例输入:
- 5.5
- 样例输出:
- 6
示例代码:
#include <stdio.h>
int main(){
double input;
while(scanf("%lf", &input) != EOF){