| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1021 人关注过本帖
标题:求助,相同的一组数据输入进去,为什么第一次可以正常排序,第二次就不可以 ...
只看楼主 加入收藏
帝师
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:166
专家分:92
注 册:2018-10-11
结帖率:92.31%
收藏
已结贴  问题点数:20 回复次数:1 
求助,相同的一组数据输入进去,为什么第一次可以正常排序,第二次就不可以了
给定n个正整数,根据各位数字之和从小到大进行排序,如果数字之和相同,则按给定正整数从小到大排序。
输入

输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。

输出
输出每组排序的结果。
样例输入

2 1 2
3 121 10 111
0

样例输出

1 2
10 111 121
(相同的一组数据输入进去,为什么第一次可以正常排序,第二次就不可以了)
代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int ex(int a[],int s[],int n);
    int n,i,j;
    int s[100]={0},a[100];//s中是各个数字的各个位数的和,a中是原本输入的数
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            for(j=a[i];j;j/=10)
            {
                s[i]+=j%10;
            }
        }
        ex(a,s,n);
        for(i=0;i<n-1;i++)
            printf("%d ",a[i]);
        printf("%d\12",a[i]);
    }
    return 0;
   
}
int ex(int a[],int s[],int n)
{
    int i,j,t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(s[j]>s[j+1])
            {
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;

                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
            else if(s[j]==s[j+1] && a[j]>a[j+1])
            {
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;

                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            
            }

        }
    }
}

搜索更多相关主题的帖子: 数据 输入 排序 int for 
2018-12-16 13:26
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:20 
你的应该是没有重置s[100]
给你试试这个

程序代码:
#include<stdio.h>
#include<math.h>

void sort(int[], int);

int main()
{
    int n, a[100];
    while (scanf("%d", &n) != EOF)
    {
        //输入
        for (int i = 0; i < n; i++)
            scanf("%d", &a[i]);
        
        //排序
        sort(a, n);

        //输出
        for (int i = 0; i < n; i++)
            printf("%d\t", a[i]);
        printf("\n\n\n");
    }
    return 0;
}

void sort(int a[], int n)
{
    int s[100] = { 0 };//s中是各个数字的各个位数的和
    int min, temp;//min用于记录最小值的下标,temp用于交换
    
    //计算各个数字的各个位数的和
    for (int i = 0; i < n; i++)
        for (int j = 0, k; k = a[i] / pow(10, j); j++)
        {
            s[i] += k % 10;
        }
    
    //排序
    for (int i = 0; i < n - 1; i++)
    {
        //寻找并记录最小值的位置,默认下标为i的数为最小值
        min = i;
        for (int j = i + 1; j < n; j++)
            if (s[j] < s[min] || s[j] == s[min] && a[j] < a[min])
                min = j;

        //交换位置
        if (min - i)
        {
            temp = s[min];
            s[min] = s[i];
            s[i] = temp;

            temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
}
2018-12-17 16:34
快速回复:求助,相同的一组数据输入进去,为什么第一次可以正常排序,第二次就不 ...
数据加载中...
 
   



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

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