杭电上的题目

来源:百度知道 编辑:UC知道 时间:2024/06/22 10:42:10
Problem Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

Sample Input
3 3 -4 2
4 0 1 2 -3
0

Sample Output
-4 3 2
-3 2 1 0

下面是我用c写的#include<stdio.h>
int main(){
int a[100],b[100],i,j,k,index,temp,n;
while(scanf("%d",&n)!=EOF){
if(n==0)break;
if(n<0)
n=-n;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
b[i]=a[i];
if(a[i]<0)
a[i]=-a[i];
}
for(k=0;k<n;k++)
{index=k;
for(i=k+1;i<n;i++)
if(a[i]>a[index])
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(b[i]<0&&(-b[i])==a[j])
a[j]=-a[j];
}
for(i=0;i<n;i++)

如楼上所说输出的最后一个数的后面是没有空格的,你的程序多输出了一个空格
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
改成
for(i=0;i<n;i++)
printf("%d%c",a[i],i==n-1?'\n':' ');
即可

注解:i==n-1?'\n':' '是条件表达式,当i==n-1时表达式的值为'\n',就是输出空行;否则表达式的值为空格。

Presentation Error 表示你的输出数据的格式有问题

比如说,可能该有个换行(或空格)你没有,或者不该有换行(或空格)你有了

我用TC来运行其他的没问题,就是编译器不认识EOF,把EOF改为0就好了。
还有这个程序还做不到多行输入的要求。

你的程序太冗长,可以直接调用求绝对值的函数abs的。程序会简洁~
int main(){
int a[100],b[100],i,j,k,index,temp,n;
while(scanf("%d",&n)!=EOF){
if(n==0)break;
if(n<0)
n=-n; //少了一个}!!!
for(i=0;i<n;i++)
scanf("%d",&a[i]);