[蓝蓝计算机考研算法训练二期]-day24

137 阅读1分钟

35、从有序顺序表中删除所有其值重复的元素,使表中元素不重复。

思路

本算法使用了一贯的手法,利用{``}来限制输入元素的范围,使用字符串依次读入所有的内容,使用strtok方法和atoi方法来对字符串中的数字进行获取,读入到num数组中。因为是有序表,所以只需要判断上一个和下一个数字是否相同即可,若相同,则跳过,若不同,则将值赋给相应的位置,同时输出即可。

具体实现

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN 100

int main() {
	char str[MAX_LEN];
    int num[MAX_LEN];
    int n, i, j=0, count=0;
    
    // 将输入的内容按照字符串读入 
	scanf("%s", str);
	// 读取字符串中不含‘{’‘}’的内容 
	for (i = 0; str[i] != '}'; i++) {
        if (str[i] != '{') {
            str[j++] = str[i];
        }
    }
    
    str[j] = '\0';  // 确保新字符串以 '\0' 结尾
    
	// 分割字符串并转换为数字
	i=0;
    char *token = strtok(str, ",");
    while (token != NULL) {
        num[i++] = atoi(token);
        token = strtok(NULL, ",");
    }
    
    for(j = 0; j < i; j++) {
    	if(num[j] != num[j+1]) {
    		num[count] = num[j];
    		printf("%d ", num[count]);
    		count++;
		}
    		
	}
	
	
	return 0;
} 

image.png

36、将两个有序表合并成一个新的有序表。

思路

数组的输入思路与上算法一个类似,只不过做成了自定义方法形式,因为都是有序表,所以在进行合并的时候,只需要判断当前的是那个一个更小(我写的升序合并)将其放入发哦一个新数组中即可。

具体实现

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN 100
#define MAX_NUM 100000

int createNum(int num[]) {
	char str[MAX_LEN];
    int n, i, j=0;
    
    // 将输入的内容按照字符串读入 
	scanf("%s", str);
	// 读取字符串中不含‘{’‘}’的内容 
	for (i = 0; str[i] != '}'; i++) {
        if (str[i] != '{') {
            str[j++] = str[i];
        }
    }
    
    str[j] = '\0';  // 确保新字符串以 '\0' 结尾
    
	// 分割字符串并转换为数字
	i=0;
    char *token = strtok(str, ",");
    while (token != NULL) {
        num[i++] = atoi(token);
        token = strtok(NULL, ",");
    }
    
    return i;
}


int main() {
	int num1[MAX_LEN], num2[MAX_LEN], num[2*MAX_LEN], n1, n2;
	n1 = createNum(num1); 
	n2 = createNum(num2); 
    
    int i=0, j=0, k=0;
	while(i < n1 || j < n2) {
		if(num1[i] < num2[j] && i != n1) {
			num[k] = num1[i];
			i++;
		} else if(j != n2) {
			num[k] = num2[j];
			j++;
		}
		printf("%d ", num[k]);
		k++;
	}
	
	return 0;
} 

image.png

小结

本次算法不算很难,主要是对数组的运用以及处理,怎样用最方便的办法来实现算法所需要的功能值得我们思考。