前言
今天和大家分享牛客网刷题的几道题目
题目
1 序列中删除指定数
最初的想法:是想在序列中先找到要替换的数,将这个数删除,但我很快发现自己无法将这个数删除。(有知道怎么删除的小伙伴可以告诉我噢!)。
解题思路:1 将删除数排除在序列之外。
2 在将这个序列后面的数前移。
3 打印这个新的序列。
代码:
#include<stdio.h> int main() { int n = 0; scanf("%d",&n); int arr[50]={0}; int i = 0; for(i=0;i<n;i++) { scanf("%d",&arr[i]); } //输入删除数 int del = 0; scanf("%d",&del); int j = 0; for(i=0;i<n;i++) { if(arr[i]!=del) { arr[j++]=arr[i]; } } //打印 for(i=0;i<j;i++) { printf("%d ",arr[i]); } return 0; }
2序列中整数去重
解题思路:1 找到相同的元素
2 如果元素数相同,便将后续元素向前移动
代码:
#include<stdio.h> int main() { int n = 0; scanf("%d", &n); //数据输入 int arr[1000] = { 0 }; int i = 0; for (i = 0;i < n;i++) { scanf("%d", &arr[i]); } for (i = 0;i < n;i++) { int j = 0; for (j = i + 1;j < n;j++) { //先找到相同元素 //如果相同,就将后续元素先前移动 if (arr[i] == arr[j]) { int m = 0; for (m = j;m < n - 1;m++) { arr[m] = arr[m + 1]; } n--;//表示已经去掉一个相同的数 j--;//继续判断下个是否要是重数 } } } for (i = 0;i < n;i++) { printf("%d ", arr[i]); } return 0; }
3有序序列合并
解题思路:1 建立三个数组arr1和arr2及arr3让下标分别为i和j及k(初始值都为0)。
2 让arr1[i]和arr2[j]比较,让较小的数存入arr3中在让i++或者j++,后继续比较。
3 当arr1或者arr2中的元素都存完后在将没存完的数组继续存入arr3中。
代码:
#include<stdio.h> int main() { int n = 0; int m = 0; scanf("%d %d", &n, &m); int arr1[1000] = { 0 }; int arr2[1000] = { 0 }; int arr3[2000] = { 0 }; //数据输入 int i = 0; for (i = 0;i < n;i++) { scanf("%d", &arr1[i]); } for (i = 0;i < m;i++) { scanf("%d", &arr2[i]); } //处理 int j = 0; int k = 0; i = 0; while (i < n && j < m) { //将一个较小的数放到合并的数组中 if (arr1[i] < arr2[j]) { arr3[k++] = arr1[i++]; } else { arr3[k++] = arr2[j++]; } } //当arr1数组元素先存完 //将arr2中剩余的数自己放入arr3中 if (i == n) { for (;j < m;j++) { arr3[k++] = arr2[j]; } } else { for (;i < n;i++) { arr3[k++] = arr1[i]; } } //打印arr3 for (i = 0;i < k;i++) { printf("%d ", arr3[i]); } return 0; }
结束语
今天分享到这里,希望小伙伴们能多多指点我,大家一起加油,一起进步!