| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖
标题:大学题库:数组排序,求该错
只看楼主 加入收藏
t1melost
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2010-12-6
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:5 
大学题库:数组排序,求该错
题目:1.从键盘上输入n个数(n<=20)放在一个一维数组中,排序,使其数组中下标为奇数的数由大到小排列,下表为为偶数的数由小到大排列,且下标为奇数的最小数大于下标为偶数的最大数。

思路:用冒泡法将数组先排序,形成升序数列。将数列的前一半的元素从小到大赋值给偶数位,后一半的元素从大到小赋值给奇数位。

程序如下:
#include <stdio.h>
void main()

{
    int n,i,j,t;
    char s1[20],s2[20];

    printf("please input numbers:");

    gets(s1);

    n=strlen(s1);

    for(i=0;i<n-1;i++)      \\冒泡法,已经检查,正确的。
    for(j=0;j<n-i-1;j++)
    {
        if(s1[j]>s1[j+1])
        {
            t=s1[j];
            s1[j]=s1[j+1];
            s1[j+1]=t;
        }
    }

    puts(s1);                                                                           
    for(i=0;i<=(n-1)/2&&s2[2*i+1]!='\0';i++)    \\\程序错误处在此处赋值,比如我输4321,正确的S2输出应该是1423,但是计算机输出却是14232P。请大家帮忙!
                                                    指出错误。另求更好的算法学习!我只会C,是个新手,指针都还没学!
    {

        s2[2*i]=s1[i];
        s2[2*i+1]=s1[n-1-i];

    }

   

    puts(s2);
}
}
搜索更多相关主题的帖子: 大学 元素 
2011-03-05 12:34
baobaoisme
Rank: 7Rank: 7Rank: 7
来 自:AVATAR
等 级:黑侠
帖 子:260
专家分:506
注 册:2010-7-9
收藏
得分:3 
从键盘上输入n个数(n<=20)放在一个一维数组中,排序,使其数组中下标为奇数的数由大到小排列,下表为为偶数的数由小到大排列,且下标为奇数的最小数大于下标为偶数的最大数。
你如果先进行冒泡,那么元素下标顺序不就是改变了吗?这样就背离题意的初衷了吧
比如4321分别为           a[0]=4,a[1]=3,a[2]=2,a[3]=1
按你的说法,在排序过后   a[0]=2,a[1]=3,a[2]=4,a[3]=1 //下标偶数的数由小到大 下标奇数的数由大到小
并且你排序用的数组竟然是字符数组,这样不太好吧,还用获取字符串的形式,本来就是对数字进行排序,最好还是用整形数组吧
2011-03-05 13:43
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:2 
以下是引用baobaoisme在2011-3-5 13:43:37的发言:

从键盘上输入n个数(n<=20)放在一个一维数组中,排序,使其数组中下标为奇数的数由大到小排列,下表为为偶数的数由小到大排列,且下标为奇数的最小数大于下标为偶数的最大数。
你如果先进行冒泡,那么元素下标顺序不就是改变了吗?这样就背离题意的初衷了吧
比如4321分别为           a[0]=4,a[1]=3,a[2]=2,a[3]=1
按你的说法,在排序过后   a[0]=2,a[1]=3,a[2]=4,a[3]=1 //下标偶数的数由小到大 下标奇数的数由大到小
并且你排序用的数组竟然是字符数组,这样不太好吧,还用获取字符串的形式,本来就是对数字进行排序,最好还是用整形数组吧
同意楼上的说法。而且我感觉题目怪怪的,有矛盾的地方。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-03-05 14:05
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:15 
#include <stdio.h>
#include <string.h>
void main()
{
    int n,i,j,t;
    char s1[20],s2[20];
   
    printf("please input numbers:");
   
    gets(s1);
   
    n=strlen(s1);
   
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(s1[j]>s1[j+1])
            {
                t=s1[j];
                s1[j]=s1[j+1];
                s1[j+1]=t;
            }
        }
    }
    puts(s1);                                                                           
    for(i=0;i<=(n-1)/2&&s2[2*i+1]!='\0';i++)
    {
        
        s2[2*i]=s1[i];
        s2[2*i+1]=s1[n-1-i];
    }
    s2[n] = '\0' ;  //字符串劫尾处理
   
    puts(s2);
}
2011-03-05 20:12
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
菜鸟练习。
程序代码:
void doIt (int n,int a[]) {  //函数doIt接收一个数组a[],长度为n

        int i,j,temp;
        for(i=0;i<n-1;i++) {
                for(j=i+1;j<n;j++) {
                        if(a[i]>a[j]) {
                                temp=a[i];
                                a[i]=a[j];
                                a[j]=temp;
                        }
                }
        }
//
        for(i=1,j=n-1;i<n/2;i+=2,j-=2) {
                        temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
        }

}

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-05 22:17
t1melost
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2010-12-6
收藏
得分:0 
回复 4楼 『点点滴滴』
谢谢
2011-03-07 23:09
快速回复:大学题库:数组排序,求该错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061130 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved