#3039 按整数最高位的值排序

10165101134 edited 6 年,10 月前

include

include

include

using namespace std;

long long a[10001];//待排序整数最大为10^18,故使用long long;

int comp(long long a,long long b);//比较函数

int main()
{
int t,k;
int n,i;

scanf("%d",&t);
for (k=0;k<t;k++)
{
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    sort(a,a+n,comp);//排序
    printf("case #%d:\n",k);
    for (i=0;i<n-1;i++)
    {
        printf("%lld ",a[i]);
    }
    printf("%lld\n",a[n-1]);
}

}

int comp(long long a,long long b)
{
long long i,j;
i=a;
j=b;

while (i/10) i/=10;
while (j/10) j/=10;//分别取最高位

if (i<0) i=-i;
if (j<0) j=-j;//排序和正负无关,所以取绝对值

if (i==j) return a<b;//题目中说如果最高位相同,则按数值从小到大排序
else return i>j;//如果最高位不同,则按最高位排序

}

c++ stl的sort应用

Comments

10175102142

using namespace std;
long long a[10001];
int comp(long long a,long long b);
int main()
{
int t,k;
int n,i;
scanf(“%d”,&t);
for (k=0;k<t;k++)
{
scanf(“%d”,&n);
for (i=0;i<n;i++)
{
scanf(“%lld”,&a[i]);
}
sort(a,a+n,comp);
printf(“case #%d:\n”,k);
for (i=0;i<n-1;i++)
{
printf(“%lld “,a[i]);
}
printf(“%lld\n”,a[n-1]);
}
}
int comp(long long a,long long b)
{
long long i,j;
i=a;
j=b;
while (i/10) i/=10;
while (j/10) j/=10;

if (i<0) i=-i;
if (j<0) j=-j;

if (i==j) return aj;
}

snowball

using namespace std;
long long a[10001];
int comp(long long a,long long b);
int main()
{
int t,k;
int n,i;
scanf(“%d”,&t);
for (k=0;k<t;k++)
{
scanf(“%d”,&n);
for (i=0;i<n;i++)
{
scanf(“%lld”,&a[i]);
}
sort(a,a+n,comp);
printf(“case #%d:\n”,k);
for (i=0;i<n-1;i++)
{
printf(“%lld “,a[i]);
}
printf(“%lld\n”,a[n-1]);
}
}
int comp(long long a,long long b)
{
long long i,j;
i=a;
j=b;
while (i/10) i/=10;
while (j/10) j/=10;

if (i<0) i=-i;
if (j<0) j=-j;

if (i==j) return aj;
}