鱼C论坛

 找回密码
 立即注册
查看: 2084|回复: 9

[已解决]大一,C++看一下

[复制链接]
发表于 2020-10-16 22:10:25 | 显示全部楼层 |阅读模式
9鱼币
辛苦一下,帮着看一下啊
最佳答案
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[n + 2];
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    sort(a, a + n, cmp1);
    for(int i = 0; i < n; i++)
        printf("%d %d\n", a[i], get_sum(a[i]));
}
微信图片_20201016220934.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[n + 2];
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    sort(a, a + n, cmp1);
    for(int i = 0; i < n; i++)
        printf("%d %d\n", a[i], get_sum(a[i]));
}

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
南城转暖 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 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[i] = SumofDigit(nums[i]);
        }

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

                                nums[k] = nums[i] + nums[k];
                                nums[i] = nums[k] - nums[i];
                                nums[k] = nums[k] - nums[i];
                        }
                }
        }

        return temp;
}

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

        int a[5] = {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[i] << " ";
                cout << result[i] << endl;
        }
        

        system("pause");
        return 0;
}

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

评分

参与人数 1荣誉 +3 鱼币 +2 收起 理由
南城转暖 + 3 + 2

查看全部评分

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

使用道具 举报

发表于 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[j] > buffer[j+1]))
                                {
                                        tSwap(&buffer[j],&buffer[j+1]);
                                }
                        }
                }
        }
        
        //选择排序
        void SelectionSort(long nsize,T * buffer)
        {
                for(long i = 0 ; i < nsize ; i ++)
                {
                        for(long j = i ; j < nsize ; j++)
                        {
                                if(!(buffer[i] > buffer[j]))
                                {
                                        tSwap(&buffer[i],&buffer[j]);
                                }
                        }
                }
        }
};

//实现数字类
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];
        
        //输入 n 个数
        for(int i = 0 ; i < n ; i++)
        {
                cin >> pNumer[i];
        }

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

        return 0;
}

评分

参与人数 1荣誉 +3 鱼币 +2 收起 理由
南城转暖 + 3 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-10-17 11:07:56 | 显示全部楼层
yuxijian2020 发表于 2020-10-17 01:02
排序用了冒泡  时间复杂度有点高,应该凑合吧

有些错误,Dev C++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-17 11:08:31 | 显示全部楼层

有些错误 DevC++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-17 22:06:06 | 显示全部楼层
什么错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-17 22:09:30 | 显示全部楼层
这是符合C++标准的程序,如果有错误,请把错误发出来.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-17 22:58:14 | 显示全部楼层
大学作业之类的
不是应该报一下,你都学了啥了吗
万一用了,理论上你还没学到的知识点
不是被发现了吗
手动 罒ω罒

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
南城转暖 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2020-10-21 11:09:37 | 显示全部楼层


我用了2种编译器(微软的和g++) 都没错啊,  你没引入头文件或者没有加命名空间或者数组设置有错或者啥啥啥,报的啥错误我也没看见啊...0.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 22:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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