C语言入门算法——明明的随机数

题目描述:

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。

第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。

第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

输入 #1

10
20 40 32 67 40 20 89 300 400 15

输出 #1

8
15 20 32 40 67 89 300 400

题目来源

P1059 [NOIP2006 普及组] 明明的随机数

思路及部分代码:

1. 排序

//按照从小到大排序
void num_min(int m){
    for(int i = 0;i < m; i++){
        for(int j = 0; j < m - 1; j++){
            if(number[j] > number[j+1]){
                int num = number[j];
                number[j] =  number[j+1];
                number[j+1] = num;
            }
        }
    }
}

2. 标志法去重

//去掉重复部分
int repeat(int n){
    int cnt = 0;
    int num = 0;
    for(int i = 0; i < n;i++){
        if(number[i] == num)  
            num_n[i] = 1;
        else{
            num = number[i];
            cnt++;
        }
    }
    return cnt;
}

总代码:

#include 
int number[1100] ={0};
int num_n[1100] = {0};


//按照从小到大排序
void num_min(int m){
    for(int i = 0;i < m; i++){
        for(int j = 0; j < m - 1; j++){
            if(number[j] > number[j+1]){
                int num = number[j];
                number[j] =  number[j+1];
                number[j+1] = num;
            }
        }
    }
}

//去掉重复部分
int repeat(int n){
    int cnt = 0;
    int num = 0;
    for(int i = 0; i < n;i++){
        if(number[i] == num)  
            num_n[i] = 1;
        else{
            num = number[i];
            cnt++;
        }
    }
    return cnt;
}

int main (){
    int n,k;
    scanf("%d",&n);

    for(int i = 0; i

总结:

 这个程序是一个简单的去重算法,通过对输入的数列进行排序和遍历,可以输出去重后的数列。

  1. 程序通过遍历和标记的方法实现了去重功能。
  2. 程序的时间复杂度为O(n^2),因为它需要进行两次遍历,所以在数据规模较大时可能会比较慢。

不足之处:

  1. 程序没有对输入进行校验,如果输入的数据不符合要求,程序可能会出现异常。
  2. 程序没有进行越界检查,如果输入的数据超过了数组的大小,程序可能会出现错误。
  3. 程序的算法虽然简单,但是在数据规模较大时,效率较低。

改良意见:

  1. 可以对输入进行校验,例如判断输入的数据是否为整数、是否在规定范围内等,以避免程序出现异常。
  2. 可以对数组进行动态分配,以避免数组越界的问题。
  3. 可以考虑使用更高效的排序算法,例如快速排序、归并排序等,以提高程序的效率。
  4. 可以考虑使用哈希表等数据结构,以避免重复元素的标记和查找,从而提高程序的效率。

你可能感兴趣的:(C语言,算法,c语言,数据结构)