鱼C论坛

 找回密码
 立即注册
查看: 2097|回复: 6

求助!!绝对值排序

[复制链接]
发表于 2015-4-2 14:12:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:


【问题描述】

输入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++的方式都写一遍,多谢。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-2 15:19:43 | 显示全部楼层
没代码看。。只能凭空说了,用过for循环逐一赋值应该可以把要求实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[i];
                }//n记录一行输入数字的个数,a数组接收要处理的数据

我百度到的 ,不过没有用呐。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[100] for(i=0;i<100;i++){ scanf("%d",&A[i])};类似于这样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-4 11:36:30 | 显示全部楼层
这个我来试下,=
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-4 23:57:04 | 显示全部楼层

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

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

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

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

然后输出,以第一个数值为回车条件,这样子就可以输出想要的排列了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[20],c[20],*p,*q;
        void  szpl(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[n]);
        
        
    for(;;)
        {                
                
                if (a[0]==0) break;  
                
                else
                {                        
                        c[k]=a[0];
                        
                        
                        szpl(p,q,k);
                        
                        
                        
                        
                        if(head==NULL)
                        {
                                p1=(struct Nuu *) malloc(LEN);                                 
                                head=p1;
                                for(i=0;i<c[k];i++)
                                {          
                                        p2=p1;
                                        p2->digit=a[i];        
                                        p1=(struct Nuu *) malloc(LEN);                                                                 
                                        p2->next=p1;
                                        
                                }                        
                                p2->next=NULL;
                                
                        }
                        else
                        {

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





void  szpl(int *b,int *q,int k)
{
        int i,m,temp;
        
        for(i=0;i<*(q+k);i++)
        {                
                scanf("%d",&b[i]);        
        }
        
        
        
        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");
                
        }
            
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表