1188--》各位数字之和排序


待修改代码(顿时感觉好官方):

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n&&n)
    {
        int a[n];
        int sum[n]//第一个注意点,以后开数组开的大一点,不要刚刚够用。比如说,题目中最大的数据量是100,那么数组可以开a[105];
            sum[0]=0;//第二个注意点,你这个样只是对sum数组的第一个进行个赋值,sum[1]以及往后都没有赋值,应该把所能用到的sum数组都清零
        for(int i=0; i<n; i++)
        {
            cin>>a[i];
        }
        for(int i=0; i<n; i++)
        {
            int k;
            while(a[i])
            {
                k=a[i]%10;
                a[i]/=10;
                sum[i]+=k;
            }//这个地方不要直接用a[i]来将每一位数剥下来,下面我会说。。。。。。
        }
        for(int i=0; i<n; i++)
        {
            for(int j=i; j<n; j++)
            {
                if(sum[i]>sum[j])
                {
                    int temp;
                    temp=a[j];
                    a[j]=a[i];
                    a[i]=temp;//这个地方在比较sum时,不光要交换数组a的值,还需要交换数组sum的值,原因是冒泡排序是两个两个的比较,比如说一共有四个数,第一个数和第二个数相比,然后第二个数和第三个数相比,慢慢的比下去,若不交换并不能完成排序
                }
            }
        }
        for(int i=0; i<n; i++)
        {
            cout<<a[i]<<" ";
        }//这个地方就是我前面说的数组a的问题了,在剥离完每一位数时,判断的条件是a[i]变为零,所以在将所有的数的每一位数都剥离完时,这个时候a[i]全都是0了,所以结果将全都是0.
        cout<<endl;
    }
    return 0;
}

改好的代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n&&n!=0)
    {
        int a[100];
        int sum[100];
        for(int i=0; i<100; i++)
        {
            sum[i]=0;

        }//这是对数组sum清零的正确姿势。。。大笑。还有一个库函数叫memset,这个函数很好用的,比如说要对sum进行清零,可以这样表示  memset(sum,0,sizeof(sum));   这就完事了,函数中第一个参数代表数组名,第二个参数代表要将数组的每一个值设为什么值,比如说设为0,就写上0,第三个参数就代表数组的大小了。

        for(int i=0; i<n; i++)
        {
            cin>>a[i];
        }
        for(int i=0; i<n; i++)
        {
            int k=a[i];
            while(k)
            {
            int temp;
                temp=k%10;
                k/=10;
                sum[i]+=temp;

            }//在进行完之后a[i]并没有改变,但是a[i]的每一位数都已经存好了。

       }

        for(int i=0; i<n; i++)
        {
            for(int j=i; j<n; j++)
            {
                if(sum[i]>sum[j])
                {
                    int temp;
                    temp=a[j];
                    a[j]=a[i];
                    a[i]=temp;
                    temp=sum[i];
                    sum[i]=sum[j];
                    sum[j]=temp;
                }
            }
        }
        for(int i=0; i<n; i++)
        {
        if(i==0)
        cout<<a[i];
        else
            cout<<" "<<a[i];
        }//控制空格,防止格式错误。
        cout<<endl;
    }
    return 0;
}

用结构体打:

代码如下:

#include<bits/stdc++.h>

using namespace std;
struct node
{
    int a;
    int b;
} q[1000];//结构体的a参数用来存输入的数,结构体的b参数用来存输入的数的各个位数之和
int main()
{
    int n;
    while(cin>>n&&n!=0)
    {
        for(int i=1; i<=n; i++)
        {
            cin>>q[i].a;
            q[i].b=0;
        }//记得对b这个参数清零
        for(int i=1; i<=n; i++)
        {
            int temp=q[i].a;
            while(temp)
            {
                q[i].b+=temp%10;
                temp/=10;
            }
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=i+1; j<=n; j++)
            {
                if(q[i].b>q[j].b)
                {
                    int temp;
                    temp=q[i].b;
                    q[i].b=q[j].b;
                    q[j].b=temp;
                    temp=q[i].a;
                    q[i].a=q[j].a;
                    q[j].a=temp;
                }
            }
        }
        for(int i=1; i<=n; i++)
        {
            if(i==1)
            {
                cout<<q[i].a;
            }
            else
                cout<<" "<<q[i].a;
        }
        cout<<endl;
    }
    return 0;

}

感觉你的代码打得还不错大笑,就是一些小的问题,改正了就好了吐舌头,加油奋斗(这上面自带的表情太少了,只能用仅有的几个了。。。)



猜你喜欢

转载自blog.csdn.net/let_life_stop/article/details/80472499