搜索
查看: 2798|回复: 7
打印 上一主题 下一主题

C语言一天一练--21.august

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-21 09:25:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 =student= 于 2012-8-21 09:29 编辑

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

输入格式 Input Format   
有2行,第1行为1个正整数,表示所生成的随机数的个数:N
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式 Output Format    
2行,第1行为1个正整数M,表示不相同的随机数的个数。
第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

【样例输入】
5
52 34 100 215 100
【样例输出】
4
34 52 100 215
---------------------------------------------------------------------------------------------------------------------------------
提示:此题可用基数排序做。不会排序的童鞋请看这篇帖子:http://www.aha-c.com/thread-243-1-1.html

沙发
发表于 2012-8-27 11:23:57 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void main()
{
        int a[MAX],num,i,j,t;
        int count=1;
  printf("输入需要生成的随机数个数:\n");
  scanf("%d",&num );
  for (i=0;i<num;i++)
  {
         /* scanf("%d",&a[i]);//方便测试数据*/
          a[i]=rand()%1000+1;
          printf("%d ",a[i]);
  }
  printf("\n");
  for(j=0;j<num-1;j++)
          for(i=0;i<num-1-j;i++)
                  if (a[i]>a[i+1])
                  {
                          t=a[i];
                          a[i]=a[i+1];
                          a[i+1]=t;
                  }

  for (i=0;i<num-1;i++)
  {
          if (a[i]==a[i+1])
                  continue;
          else
                  count++;
  }
  printf("%d \n",count);
  for (i=0;i<num;i++)
  {
          if(a[i]==a[i+1])
                  continue;
          else
              printf("%d ",a[i]);
  }
}
板凳
 楼主| 发表于 2012-8-31 09:34:18 | 只看该作者
vcwuyang 发表于 2012-8-27 11:23
#include
#include
#define MAX 100

同学,这题不用你产生随机数,只是对输入的几个数进行排序,再把相同的数字去掉,最后打印去掉相同数字的剩余数的个数以及剩下的排序好的数据即可
地板
发表于 2012-10-1 12:38:35 | 只看该作者
本帖最后由 tool_in_kit 于 2012-10-1 12:41 编辑

#include <stdio.h>

int main()
{
        int n,i;
        int num;
        int count=0;
        int a[1001]={0};//初始化为0
        scanf("%d",&n);//n个元素
        for(i=0;i<n;++i)
        {
                scanf("%d",&num);
                a[num] = 1;//标记存在输入的这个数
        }
        //开始计数
        count = 0;
        for(i=1;i<1001;++i)
        {
                if(a == 1)//说明这个数存在
                        ++count;
        }
        printf("%d\n",count);
        for(i=1;i<1001;++i)//因为是从小到大遍历,所以不用排序
        {
                if(a==1)
                {
                        //这里的判断是为了输出格式好看
                        if(count!=1)
                                printf("%d ",i);
                        else
                                printf("%d",i);
                        count--;
                }
        }
        printf("\n");
        return 0;
}

5#
发表于 2012-10-1 12:39:34 | 只看该作者
本人测试通过(这题做过!),求给分,有任何疑问,可以给我发邮件,tool_in_kit@163.com
谢谢!
6#
发表于 2012-10-1 12:40:39 | 只看该作者
#include <stdio.h>

int main()
{
        int n,i;
        int num;
        int count=0;
        int a[1001]={0};//初始化为0
        scanf("%d",&n);//n个元素
        for(i=0;i<n;++i)
        {
                scanf("%d",&num);
                a[num] = 1;//标记存在输入的这个数
        }
        //开始计数
        count = 0;
        for(i=1;i<1001;++i)
        {
                if(a[i] == 1)//说明这个数存在
                        ++count;
        }
        printf("%d\n",count);
        for(i=1;i<1001;++i)//因为是从小到大遍历,所以不用排序
        {
                if(a[i]==1)
                {
                        //这里的判断是为了输出格式好看
                        if(count!=1)
                                printf("%d ",i);
                        else
                                printf("%d",i);
                        count--;
                }
        }
        printf("\n");
        return 0;
}
7#
发表于 2013-2-4 18:58:22 | 只看该作者
前排学习   {:soso_e182:}
8#
发表于 2013-2-27 19:10:55 | 只看该作者
本帖最后由 gloomyakon 于 2013-2-28 14:13 编辑

[code=Cpp width=740px]#include<stdio.h>
#include<stdlib.h>
void makeUnique(int buffer[],int* curCount)
{//找到相同的则前移覆盖
        int temp;
        int i,j,k;
        for(i=0;i<*curCount;i++){
                for(j=i+1;j<*curCount;j++){
                        if(buffer[j]==buffer){
                                k=j;
                                while(k<*curCount-1) {buffer[k]=buffer[k+1];k++;}
                                (*curCount)--;
                        }
                }
        }
}
void insertion_sort(int buffer[],int count)
{//插入排序
        int i,j,temp;
        for (i=0;i<count-1;i++){
                j=i+1;
                while(j<count && buffer[j]<buffer)
                        temp=buffer,buffer=buffer[j],buffer[j]=temp;
        }
}
int main()
{
        int buffer[100];
        int temp;
        int i=0,count=0;
        printf("请输入一共多少个数\n");
        while(scanf("%d",&count)&&count>100){
                printf("要小于100个数\n");
        };
        printf("请输入%d个数字\n",count);
        while(i<count){
                scanf("%d",&temp);
                if(temp<=1000){
                        buffer[i++]=temp;
                }
        }
        makeUnique(buffer,&count);
        insertion_sort(buffer,count);
        printf("一共有%d个\n",count);
        for (i=0;i<count;i++)
        {
                printf("%d\t",buffer);
        }
        printf("\n");
        system("pause");
        return 0;
}[/code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表