绝对值排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40065 Accepted Submission(s): 19601
3 3 -4 2 4 0 1 2 -3 0
-4 3 2 -3 2 1 0
暴力ac的代码:
#include<stdio.h>
int main()
{
int n,t,k;
while(~scanf("%d",&n),n!=0)
{
t=n;
int i,j,b[110]={0},a[110]={0};
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(b[i]<0&&b[j+1]==0)
{b[j+1]=b[n-1];b[n-1]=0;}
else if(b[j]<0&&b[j+1]>0)
{
b[j]=-1*b[j];
if(b[j]<b[j+1])
{k=b[j];b[j]=b[j+1];b[j+1]=k;b[j+1]=-1*b[j+1];}
else
b[j]=-1*b[j];
}
else if(b[j]<0&&b[j+1]<0)
{
b[j]=-1*b[j];
b[j+1]=-1*b[j+1];
if(b[j]<b[j+1])
{k=b[j];b[j]=b[j+1];b[j+1]=k;b[j+1]=-1*b[j+1];b[j]=-1*b[j];}
else
{b[j]=-1*b[j];
b[j+1]=-1*b[j+1];}
}
else if(b[j]>0&&b[j+1]<0)
{
b[j+1]=-1*b[j+1];
if(b[j]<b[j+1])
{k=b[j];b[j]=b[j+1];b[j+1]=k;b[j]=-b[j];}
else
b[j+1]=-1*b[j+1];
}
else
{if(b[j]<b[j+1])
{k=b[j];b[j]=b[j+1];b[j+1]=k;}
}
}
for(i=0;i<n;i++)
{
printf("%d",b[i]);
if(i<n-1)
printf(" ");
}
printf("\n");
}
return 0;
}
通过这道题,知道了自己还有很多东西要学,如果知道了abs函数,也就不用这么麻烦的把所有例子都举出来,变成下面的代码了。
#include<stdio.h> #include<math.h> int main() { int i,n,a[101],tem; while(scanf("%d", &n)&&n) { for(i=0; i<n; i++) scanf("%d", &a[i]); for(i=0; i<n-1; i++) for(int j=0; j<n-i-1; j++) if (abs(a[j]) < abs(a[j+1])) { tem = a[j]; a[j] = a[j+1]; a[j+1] = tem; } for(i=0; i<n-1; i++) printf("%d ", a[i]); printf("%d\n",a[n-1]); } return 0; }
简短了很多,想的也少了。以后,加油↖(^ω^)↗努力学!