题解 | #提取不重复的整数#
提取不重复的整数
https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1
#include <stdio.h>
#include<malloc.h>
int* arr;
//获取数组的长度
int Arrlen(int num) {
int len = 0;
while (num) {
num /= 10;
len++;
}
return len;
}
//取出每一位放入数组,且此时的刚好为倒序
int* Arrcul(int n, int len) {
arr = (int*)malloc(len * sizeof(int));
int index = 0;
int i;
while (n) {
arr[index++] = n % 10;
n /= 10;
}
return arr;
}
int main() {
int n, i, j, k;
scanf("%d", &n);
int len = Arrlen(n);
arr = Arrcul(n, len);
//删除数组重复元素
for (i = 0; i < len; i++) { //循环判断数组中每一个数
for (j = i + 1; j < len; j++) { //判断arr[i]后边的数是否和arr[i]相等
if (arr[i] == arr[j]) {
for (k = j; k < len - 1; k++)
arr[k] = arr[k + 1]; //将arr[j]后面的元素全往前移一个位置
j--; //arr[j+1]取代arr[j]位置,为使下次从arr[j+1]开始查找,j减一(为使j保持不变)
len--; //数组长度减一
}
}
}
//输出数组
for(i=0;i<len;i++)
printf("%d",arr[i]);
}
通俗易懂的思路
代码功能分三块:
1.数字长度的获取函数
int Arrlen(int num) {
int len = 0;
while (num) {
num /= 10;
len++;
}
return len;
}
2.数字各元素的获取并存入数组
int* Arrcul(int n, int len) {
arr = (int*)malloc(len * sizeof(int));
int index = 0;
int i;
while (n) {
arr[index++] = n % 10;
n /= 10;
}
return arr;
}
3、数组重复元素的删除
for (i = 0; i < len; i++) { //循环判断数组中每一个数
for (j = i + 1; j < len; j++) { //判断arr[i]后边的数是否和arr[i]相等
if (arr[i] == arr[j]) {
for (k = j; k < len - 1; k++)
arr[k] = arr[k + 1]; //将arr[j]后面的元素全往前移一个位置
j--; //arr[j+1]取代arr[j]位置,为使下次从arr[j+1]开始查找,j减一(为使j保持不变)
len--; //数组长度减一
}
}
}
自己从头开始刷的C语言
嘉士伯公司氛围 714人发布