第一行输入一个整数
,代表明明生成的数字个数。
此后
行,第
行输入一个整数
,代表明明生成的随机整数。
输出若干行,每行输出一个整数,代表输入数据排序后的结果。第一行输出最小的数字。
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;
}
}