机试编程(二)

机试编程(二)

目录:

  1. 字符串最后一个单词的长度【华为机试】
  2. 明明的随机数【华为机试】
  3. 取近似值【华为机试】
  4. 合并表记录【华为机试】
  5. 提取不重复的整数【华为机试】
  6. 句子逆序【华为机试】
  7. 字串的连接最长路径查找【华为机试】
  8. 进制转换【华为机试】
  9. 识别有效的IP地址和掩码并进行分类统计【华为机试】
  10. 密码验证合格程序【华为机试】

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){
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值