当前位置: 代码迷 >> C语言 >> 排序
  详细解决方案

排序

热度:468   发布时间:2008-01-03 11:46:33.0
排序
排序

Description

给定一组数,按升序将其排好。
要求:此题并非只为了排序,请注意输入与输出说明。

Input

输入文件由若干测试数据集构成。每一个数据集又由两部分组成。第一部分是两个非负整数n(1<=n<=100000)和m(1<=m<=n),分别代表要排序的一组数的个数和排序后新数列输出时的间隔数(即输出第一个数后,每隔m个输出一个)。第二部分是 个正整数(每个整数均小于2,000,000,000)。当n=m=0时输入中止。

Output

对每一测试数据集,你必须在同一行上输出符合要求的那些数来。在你排序完毕后,你应该输出其中每m个中的第一个,并且要求两个相邻的数之间恰好由一个空格来隔开。在两组测试数据集的输出结果之间不能有空白行。

Sample Input


8 2
3
5
7
1
8
6
4
2
0 0

Sample Output


1 3 5 7

Hint

注意:数据的范围。
搜索更多相关的解决方案: 整数  数据集  输出  Description  Output  

----------------解决方案--------------------------------------------------------
请大家帮帮忙.
----------------解决方案--------------------------------------------------------
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    long *p,n,m,i,j,temp;
    while(1)
    {
        scanf("%ld%ld",&n,&m);
        if(m==0&&n==0)
            break;
        p=(long*)calloc(n,sizeof(long));
        for(i=0;i<n;i++)
            scanf("%ld",&p[i]);
        for(i=0;i<n-1;i++)
            for(j=0;j<n-1-i;j++)
                if(p[j]>p[j+1])
                {
                    temp=p[j];
                    p[j]=p[j+1];
                    p[j+1]=temp;
                }
        for(i=0;i<n;i+=m)
            printf("%ld ",p[i]);
        printf("\n");
        free(p);
    }
    system("pause");
    return 0;
}

我来试哈!注意提交的时候将数据类型改为long long(我用的编译器不支持),输入用%lld,将暂停的语句去掉!
----------------解决方案--------------------------------------------------------
win下GCC(MinGW)是 printf("%I64d");  *nix下是 printf("%lld" ) ;
----------------解决方案--------------------------------------------------------
unsigned就可以了
----------------解决方案--------------------------------------------------------
  相关解决方案