这不科学啊 发表于 2015-4-2 14:12:14

求助!!绝对值排序

题目:


【问题描述】
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

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

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

【样例输入】
3 3 -4 2
4 0 1 2 -3
0

【样例输出】
-4 3 2
-3 2 1 0


PS:排序没问题,主要是输入那里,如何把输入的东西装进数组中(按照样例那样,一行输入几个数字)。。求大神指点。。最后C和C++的方式都写一遍,多谢。

ANDES 发表于 2015-4-2 15:19:43

{:5_104:}没代码看。。只能凭空说了,用过for循环逐一赋值应该可以把要求实现。

这不科学啊 发表于 2015-4-2 15:50:12

ANDES 发表于 2015-4-2 15:19
没代码看。。只能凭空说了,用过for循环逐一赋值应该可以把要求实现。

while(cin >> n && n != 0){
                for(i = 0; i < n; i++){
                        cin >> a;
                }//n记录一行输入数字的个数,a数组接收要处理的数据

我百度到的 ,不过没有用呐。。

ANDES 发表于 2015-4-2 16:41:40

这不科学啊 发表于 2015-4-2 15:50
while(cin >> n && n != 0){
                for(i = 0; i < n; i++){
                        cin >> a;


....是说你没把代码贴出来,不清楚你什么情况。   至于for循环赋值,定义一个数组A for(i=0;i<100;i++){ scanf("%d",&A)};类似于这样。

haiouda 发表于 2015-4-4 11:36:30

这个我来试下,=

haiouda 发表于 2015-4-4 23:57:04


:cry我闭着眼睛写了好几个小时,写得差不多了,一运行,直接当机 :cry

不打回车,无论是 scanf() 还是 getchar() 都没法输入;我好多个小时,基本上白写了 :cry:cry

看来输入部分,还得重写;这次的思路是,把 4 -3 5 6 0 当做一个字符串来处理,然后把几个数字分别提取出来;

后面写的,希望还可用。
思路:
定义一个结构,把除第一个数,以外的数都串起来,遇到输入 0,结构就结尾了。

然后输出,以第一个数值为回车条件,这样子就可以输出想要的排列了。

haiouda 发表于 2015-4-5 13:23:08

#include<stdio.h>
#include<malloc.h>
#include<math.h>


#define LEN sizeof(struct Nuu)

struct Nuu
{
        int digit;
        struct Nuu *next;
};


int main()
{
        int i=0,k=0,n=0,a,c,*p,*q;
        voidszpl(int *b,int *q,int k);
    void print(struct Nuu *head,int *q,int k);
   
        struct Nuu *head,*p1,*p2;
       
        p=a;
        q=c;
       
        head=NULL;
       
        scanf("%d",&a);
       
       
    for(;;)
        {               
               
                if (a==0) break;
               
                else
                {                       
                        c=a;
                       
                       
                        szpl(p,q,k);
                       
                       
                       
                       
                        if(head==NULL)
                        {
                                p1=(struct Nuu *) malloc(LEN);                                
                                head=p1;
                                for(i=0;i<c;i++)
                                {       
                                        p2=p1;
                                        p2->digit=a;       
                                        p1=(struct Nuu *) malloc(LEN);                                                                
                                        p2->next=p1;
                                       
                                }                       
                                p2->next=NULL;
                               
                        }
                        else
                        {

                               
                                for(i=0;i<c;i++)
                                {
                  p2->next=p1;
                  p2=p1;
                                        p2->digit=a;
                                        p1=(struct Nuu *) malloc(LEN);
                                                      
                                                                                                                       
                                }
                                p2->next=NULL;
                        }
                       
                }
               
               
                n=0;        k++;
               
                scanf("%d",&a);
               
        }
        print(head,q,k);
        printf("\n\n");
       
       
        return 0;
}





voidszpl(int *b,int *q,int k)
{
        int i,m,temp;
       
        for(i=0;i<*(q+k);i++)
        {               
                scanf("%d",&b);       
        }
       
       
       
        for(i=0;i<*(q+k);i++)
        {
                for(m=i+1;m<*(q+k);m++)
                {
                        if( abs(*(b+i)) < abs(*(b+m)))
                        {
                                temp=*(b+i);
                                *(b+i)=*(b+m);
                                *(b+m)=temp;
                               
                        }
                       
                }
        }
       
       
}




void print(struct Nuu *head,int *q,int k)
{
        int i,m;
        struct Nuu *p;
        p=head;
       
        for(i=0;i<k;i++)
        {
                for(m=0; m<*(q+i);m++)
                {
                        printf("%d ",p->digit);
                        p=p->next;                       
                }
                printf("\n");
               
        }
           
}













页: [1]
查看完整版本: 求助!!绝对值排序