测试-杭电c入门简单问题 求指导一下

问题描述

杭电c入门简单问题 求指导一下
题目如下
输入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

Author
lcy

Source

我编的代码如下

**#include

int main()

{

int n;

int a[1000];

int b[1000];

int c[1000];

int i;

int h;

int q;

int k;

while(scanf(""%d""&n)!=EOF)

{

for(i=0;i<n;i++)

{

scanf(""%d""&a[i]);

}

for(i=0;i<n;i++)

{

if(a[i]<0)

{

b[i]=-1*a[i];

}

else

{

b[i]=a[i];

}

}

h=0;

q=0;

for(k=1;k<=n;k++)

{

for(i=1;i<n;i++)

{

if(b[h]<b[i])

{

h=i;

}

}

c[q]=b[h];

if(c[q]==a[h])

{

if(q!=n)

{

printf(""%d ""c[q]);

}

if(q==(n-1))

{

printf(""%dn""c[q]);

}

}

if(c[q]!=a[h])

{

c[q]=-1*c[q];

if(q!=n)

{

printf(""%d ""c[q]);

}

if(q==(n-1))

{

printf(""%dn""c[q]);

}

}

b[h]=0;

h=0;

q=q+1;

}

}

return 0;

}**

问题是我最后输出的时候老是多输出最后一个数字,如我输入3 -4 5 1 输出的应该是5 -4 1但是我的是5 -4 1 1 不太明白最后的1 在哪里输出的求大神帮忙看看那里的问题应该如何解决谢谢了

解决方案

下面这两个判断有重复的地方,当q=n-1的时候两个都会满足

 if(q!=n)                {                    printf(""%d ""c[q]);                }                if(q==(n-1))                {                    printf(""%dn""c[q]);                }

应该改为

 if(q!=n-1)                {                    printf(""%d ""c[q]);                }                if(q==(n-1))                {                    printf(""%dn""c[q]);                }

解决方案二:
谢谢您的回答 谢谢了

时间: 2025-01-20 15:30:37

测试-杭电c入门简单问题 求指导一下的相关文章

算法-C/C++杭电1501题Wooden sticks 求挑错

问题描述 C/C++杭电1501题Wooden sticks 求挑错 DescriptionThere is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking machine in one by one fashion. It needs some time called setup

java-杭电acm1106为什么就是WA求解释,看了大牛的思想,结果输出正确

问题描述 杭电acm1106为什么就是WA求解释,看了大牛的思想,结果输出正确 排序 Problem Description 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0). 你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出. Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于

c语言-菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点

问题描述 菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点 Description 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前n项之和. Input 多测试用例,每个测试用例一行,每行是一个正整数n Output 为每个测试用例单独输出一行:该数列的前n项之和.结果均保留小数点后10位. Sample Input 1 2 3 Sample Output 2.0000000000 3.5000000000

acm-关于杭电ACM2031 进制转换感觉找不出自己的错误,求指出

问题描述 关于杭电ACM2031 进制转换感觉找不出自己的错误,求指出 #includeint main(){ long nr; char a[10000]; while(scanf(""%d%d""&n&r) == 2) { if(n == 0) printf(""0 ""); else { int i = 0; if(n while(n > 0) { a[i++] = n%r; n=n/r; } in

代码-杭电ACM1096,一直有错误,求帮忙

问题描述 杭电ACM1096,一直有错误,求帮忙 我的代码 #include int main(){ int n, i; int a, b; int x, sum; while(scanf("%d", &n) != EOF){ for (i = 0; i < n; i++){ scanf("%d", &a); for (b = 0; b < a; b++){ sum = 0; scanf("%d", &x);

算法 c++-杭电1087,,dp问题,求解答!

问题描述 杭电1087,,dp问题,求解答! #include using namespace std; int n; int a[10005]; int vis[10005]; int dp(int n) { if(vis[n]!=-1) return vis[n]; vis[n] = 0; int i; for(i= n-1;i>=0;i--) { if(i==-1) return 0; dp(i); if(vis[i]>=vis[n]) vis[n] = vis[i]; if(a[i]&

指针-大神求指导简单C语言问题 刚刚入门

问题描述 大神求指导简单C语言问题 刚刚入门 #include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct _Teacher { struct _Teacher *t; }Teacher; int main() { Teacher teacher1; Teacher teacher2; Teacher * head1 = &teacher1; Teacher

杭电 1272 poj 1308 小希的迷宫

这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正. 1.题目概览 这道题是杭电1272,POJ 1308如果写好了代码可以试一试. 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s

acm-求问杭电ACM2010水仙花数,我的这个答案为什么是错的

问题描述 求问杭电ACM2010水仙花数,我的这个答案为什么是错的 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int m=0; int n=0; while(in.hasNext()){ m=in.nextInt(); n=in.nextInt(); if(m<n){ narcissus(m,