南城转暖 发表于 2020-10-16 22:10:25

大一,C++看一下

辛苦一下,帮着看一下啊

此帐号已被注销 发表于 2020-10-16 22:10:26

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int get_sum(int x)
{
    if(x == 0)
      return 0;
    else
    {
      return x%10 + get_sum(x / 10);
    }
}
bool cmp1(int x, int y)
{
    int xx = get_sum(x), yy = get_sum(y);
    if( xx != yy)
      return xx > yy;
    else
    {
      return x > y;
    }
}
int main()
{
    int *a, n;
    scanf("%d", &n);
    a = new int;
    for(int i = 0; i < n; i++)
      scanf("%d", &a);
    sort(a, a + n, cmp1);
    for(int i = 0; i < n; i++)
      printf("%d %d\n", a, get_sum(a));
}

yuxijian2020 发表于 2020-10-17 01:02:23

本帖最后由 yuxijian2020 于 2020-10-17 01:12 编辑

int SumofDigit(const int& num)//计算数字各个位上的和
{
        int temp = num;
        int result = 0;

        while (temp)
        {
                result += temp % 10;                //每次取余得到个位数
                temp /= 10;                        //每次整除于10去掉已经取到的个位数
        }

        return result;
}

vector<int> numsSort(vector<int>& nums, int size)
{
        vector<int> temp(size);

        for (int i = 0; i < size; i++)
        {
                temp = SumofDigit(nums);
        }

        for (int i = 0; i < size; i++)                                //冒泡排序因为稳定就用它了
        {
                for (int k = i + 1; k < size; k++)
                {
                        if (temp < temp)
                        {
                                //交换        没有申请变量省了点空间....
                                temp = temp + temp;
                                temp = temp - temp;
                                temp = temp - temp;

                                nums = nums + nums;
                                nums = nums - nums;
                                nums = nums - nums;
                        }
                }
        }

        return temp;
}

int main()
{
        //这里我直接定义了数组可以改成接受输入
        //第一次输入的值就是size
        //接下来输入每次输入空格的时候就往数组里面添加之前输入的数字

        int a = {101, 100, 999, 1234, 110};
        int size = sizeof(a) / sizeof(int);

        vector<int> nums(a, a + size);
       
        vector<int> result = numsSort(nums, size);

        for (int i = 0; i < size; i++)
        {
                cout << nums << " ";
                cout << result << endl;
        }
       

        system("pause");
        return 0;
}

排序用了冒泡时间复杂度有点高,应该凑合吧

xieglt 发表于 2020-10-17 10:27:55

#include <iostream.h>

//排序类
template<typename T>
class CTempSort
{
private:
        void tSwap(T * v1,T * v2)
        {
                T temp = * v1;
                * v1 = * v2;
                * v2 = temp;
        }

public:
        //冒泡排序
        void BubbingSort(long nsize, T * buffer)
        {
                for(long i = 0 ; i < nsize ; i ++)
                {
                        for(long j = 0 ; j < nsize - i -1; j++)
                        {
                                if(!(buffer > buffer))
                                {
                                        tSwap(&buffer,&buffer);
                                }
                        }
                }
        }
       
        //选择排序
        void SelectionSort(long nsize,T * buffer)
        {
                for(long i = 0 ; i < nsize ; i ++)
                {
                        for(long j = i ; j < nsize ; j++)
                        {
                                if(!(buffer > buffer))
                                {
                                        tSwap(&buffer,&buffer);
                                }
                        }
                }
        }
};

//实现数字类
class CNumber
{
public:
        CNumber()
        {
                m_number = 0;
                m_sum = 0;
        };

        CNumber(int num)
        {
                m_number = num;
                getSum();
        }

        ~CNumber(){}
       
        CNumber & operator = (int num)
        {
                m_number = num;
                getSum();
                return * this;
        }
       
        //重载赋值操作符 用于排序
        CNumber & operator = (const CNumber & num)
        {
                m_number = num.m_number;
                m_sum = num.m_sum;
                return * this;
        }
       
        //重载 > 操作符,用于排序
        bool operator > (const CNumber & num)
        {
                if(m_sum > num.m_sum)
                {
                        return true;
                }
                else if(m_sum < num.m_sum)
                {
                        return false;
                }
                else
                {
                        return m_number < num.m_number ? true : false;
                }
        }
       
        //重载 cout << 操作符
        friend ostream & operator << (ostream & os,const CNumber & num)
        {
                cout << num.m_number << " " << num.m_sum << endl;
                return os;
        }
       
        //重载 cin >> 操作符
        friend istream & operator >> (istream & is,CNumber & num)
        {
                cin >> num.m_number;
                num.getSum();
                return is;
        }

private:
        //计算每位上数字之和
        void getSum()
        {
                int num = m_number;
                m_sum = 0;

                while(num > 0)
                {
                        m_sum += num % 10;
                        num /= 10;
                }
        }
private:
        int m_number;
        int m_sum;
};

int main(int argc, char* argv[])
{
        int n;
        //输入数个个数
        cin >> n;
       
        //定义一个 n的数组
        CNumber * pNumer = new CNumber;
       
        //输入 n 个数
        for(int i = 0 ; i < n ; i++)
        {
                cin >> pNumer;
        }

        //排序
        CTempSort<CNumber> sort;
        sort.BubbingSort(n,pNumer);
       
        //输出排序后的数组
        for(i = 0 ; i < n ; i ++)
        {
                cout << pNumer;
        }
       
        //释放内存
        delete [] pNumer;

        return 0;
}

南城转暖 发表于 2020-10-17 11:07:56

yuxijian2020 发表于 2020-10-17 01:02
排序用了冒泡时间复杂度有点高,应该凑合吧

有些错误,Dev C++

南城转暖 发表于 2020-10-17 11:08:31

xieglt 发表于 2020-10-17 10:27


有些错误 DevC++

xieglt 发表于 2020-10-17 22:06:06

什么错误?

xieglt 发表于 2020-10-17 22:09:30

这是符合C++标准的程序,如果有错误,请把错误发出来.

Mondayisgood 发表于 2020-10-17 22:58:14

大学作业之类的
不是应该报一下,你都学了啥了吗
万一用了,理论上你还没学到的知识点
不是被发现了吗
手动 罒ω罒

yuxijian2020 发表于 2020-10-21 11:09:37

南城转暖 发表于 2020-10-17 11:07
有些错误,Dev C++

我用了2种编译器(微软的和g++) 都没错啊,你没引入头文件或者没有加命名空间或者数组设置有错或者啥啥啥,报的啥错误我也没看见啊...0.0
页: [1]
查看完整版本: 大一,C++看一下