排序
排序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
注意:数据的范围。
----------------解决方案--------------------------------------------------------
请大家帮帮忙.
----------------解决方案--------------------------------------------------------
程序代码:
#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;
}
#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就可以了
----------------解决方案--------------------------------------------------------