第一行输入一个整数
,代表明明生成的数字个数。
此后
行,第
行输入一个整数
,代表明明生成的随机整数。
输出若干行,每行输出一个整数,代表输入数据排序后的结果。第一行输出最小的数字。
3 2 2 1
1 2
#include <stdio.h> int main() { int num=0; int numsize=0; int a[501]={0};//创造一个空数组,用数组下标表示当前数字,数组值表示当前数字是否存在 scanf("%d",&numsize);//读总数 for(int i=0;i<numsize;i++){ scanf("%d",&num); a[num]++; } for(int i=1;i<=500;i++){ if(a[i]>0){ printf("%d\n",i); } } return 0; }
#include <stdio.h> int main() { int n; scanf("%d", &n); int ziDian[500] = {0}; for (int i = 0; i < n; i ++){ int t; scanf("%d", &t); ziDian[t - 1] = 1; } for (int i = 0; i < 500; i ++){ if (ziDian[i] != 0){ printf("%d\n", i + 1); } } return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> void bubble_sort(int* arr, int len_t) { for (int i = 0; i < len_t; i++) { for (int j = 0; j < len_t - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } void print_arr(int* arr, int len_t) { for (int i = 0; i < len_t; i++) { printf("%d\n", arr[i]); } } int main() { int n = 0; // 代表生成的数字个数 scanf("%d", &n); if (n < 1 || n > 1000) { exit(-1); } // 创建动态数组,长度由用户输入 int* arr = (int*)malloc(n * sizeof(int)); if (NULL == arr) { perror("malloc\n"); exit(-1); } // 输入随机数 for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } // 定义哈希数组并写入哈希表 int arr_hash[501] = {0}; for (int i = 0; i < n; i++) { int index = arr[i]; arr_hash[index] += 1; } // 定义数组2,接住去重后的随机数 int* arr2 = (int*)malloc(n * sizeof(int)); if (NULL == arr2) { perror("malloc failed!\n"); return -1; } int j = 0; for (int i = 0; i < 501; i++) { if (arr_hash[i] > 0) { arr2[j] = i; j++; } } // 调整 arr2 的大小 int* new_arr2 = (int*)realloc(arr2, j * sizeof(int)); if (new_arr2 == NULL) { free(arr2); // 释放原内存块 printf("Memory reallocation failed!\n"); exit(1); // 退出程序或处理错误 } else { arr2 = new_arr2; // 更新指针 } int len = j; // 更新 len 的值 bubble_sort(arr2, len); print_arr(arr2, len); // 释放内存 free(arr); free(arr2); return 0; }
#include "stdio.h" #include "string.h" //思路:四部分,输入,去重,排序,最后输出。——可以直接先排序,之后去重和输出合为一体(输出不重复部分) void upper_bubble_sort(int val[],int n) { int a = 0,b = 0,temp; for(;a < n; a++) { for(b = 0; b < n -a -1; b++) { if (val[b] > val[b+1]) { temp = val[b]; val[b] = val[b+1]; val[b+1] = temp; } } } } int main() { //输入部分。其中:n为数据个数,val数组存放输入的数字。 int n,val[1000],i,out[1000],c; scanf("%d",&n); for(i = 0; i < n; i++) { scanf("%d",&val[i]); } //也可以先排序再去重?先试试冒泡吧。 //排序部分 upper_bubble_sort(val, n); //去重和输出合为一体,即直接输出不重复部分。 printf("%d\n",val[0]); for (i = 0; i < n -1; i++) //这里不是n-1的话会溢出,吃过一次亏引以为戒 { if (val[i] < val[i + 1]) { printf("%d\n",val[i+1]); } } }
#include <stdio.h> int main() { int n; scanf("%d", &n); int a[500] = {0}; int num = 0; for (int i = 0; i < n; i++) { int x; scanf("%d", &x); a[x - 1] += 1; } for (int i = 0; i < 500; i++) { if (a[i] > 0) { printf("%d\n", (i + 1)); } } return 0; }
//这个也能算较难? #include <stdio.h> #include <time.h> #include <stdlib.h> int main() { //输入 int m =0; int arr[1000]={0}; int i =0; int haxh[501]={0}; scanf("%d",&m); //去重复 for(i = 0;i<m;i++) { scanf("%d",&arr[i]); if(haxh[arr[i]] ==0) haxh[arr[i]]=1; } //排序 for(i=0;i<501;i++) { if(haxh[i]) { printf("%d\n",i); } } return 0; }
BitMap去重
#include<stdbool.h> #include<stdlib.h> #include<stdio.h> #define MAX_NUM 500 unsigned char* creatBitMap(int n); bool isExist(unsigned char* base,unsigned int n); void input(unsigned char* base); unsigned int byteStep(unsigned int n); // 返回数字n相较base位置 unsigned char bitAddr(unsigned int n); // 返回数字n所在bit的地址(0 ~ 7) unsigned int getNum(unsigned int step, unsigned char bit); //返回 *(base + step)第bit所代表的数字 void printNum(unsigned char* base, int step); //打印对应byte的所有数字 void addNum(unsigned char* base, unsigned int n); int main() { int n = 0; scanf("%d", &n); unsigned char* base = creatBitMap(n); for (int i = 0; i < n; i++) { input(base); } for (int i = 0; i < MAX_NUM + 1; i++) { printNum(base, i); } free(base); return 0; } // 程序结束时手动销毁 unsigned char* creatBitMap(int n) { unsigned char* base = (unsigned char*)calloc(MAX_NUM + 1, sizeof(char)); return base; } // 输入至位图 void input(unsigned char* base) { int val = 0; scanf("%d", &val); addNum(base, val); } void addNum(unsigned char* base, unsigned int n) { int step = byteStep(n); char bit_addr = bitAddr(n); char binary = 1 << bit_addr; *(base + step) |= binary; } unsigned int byteStep(unsigned int n) { unsigned int step = n / 8; return step; } unsigned char bitAddr(unsigned int n) { unsigned bit = n % 8; return bit; } unsigned int getNum(unsigned int step, unsigned char bit) { return step * 8 + bit; } void printNum(unsigned char* base, int step) { for (int i = 0; i < 8; i++) { unsigned num = getNum(step, i); if (isExist(base, num)) { printf("%d\n", num); } } } bool isExist(unsigned char* base, unsigned num) { int step = byteStep(num); int bit = bitAddr(num); if (*(base + step) & 1 << bit) { return true; } else { return false; } }