鱼C论坛

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

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

[复制链接]
最佳答案
0 
发表于 7 天前 | 显示全部楼层 |阅读模式
9鱼币
辛苦一下,帮着看一下啊
最佳答案
  1. #include<bits/stdc++.h>
  2. #include<iostream>
  3. using namespace std;
  4. int get_sum(int x)
  5. {
  6.     if(x == 0)
  7.         return 0;
  8.     else
  9.     {
  10.         return x%10 + get_sum(x / 10);
  11.     }
  12. }
  13. bool cmp1(int x, int y)
  14. {
  15.     int xx = get_sum(x), yy = get_sum(y);
  16.     if( xx != yy)
  17.         return xx > yy;
  18.     else
  19.     {
  20.         return x > y;
  21.     }
  22. }
  23. int main()
  24. {
  25.     int *a, n;
  26.     scanf("%d", &n);
  27.     a = new int[n + 2];
  28.     for(int i = 0; i < n; i++)
  29.         scanf("%d", &a[i]);
  30.     sort(a, a + n, cmp1);
  31.     for(int i = 0; i < n; i++)
  32.         printf("%d %d\n", a[i], get_sum(a[i]));
  33. }
复制代码
微信图片_20201016220934.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1 
发表于 7 天前 | 显示全部楼层    本楼为最佳答案   
  1. #include<bits/stdc++.h>
  2. #include<iostream>
  3. using namespace std;
  4. int get_sum(int x)
  5. {
  6.     if(x == 0)
  7.         return 0;
  8.     else
  9.     {
  10.         return x%10 + get_sum(x / 10);
  11.     }
  12. }
  13. bool cmp1(int x, int y)
  14. {
  15.     int xx = get_sum(x), yy = get_sum(y);
  16.     if( xx != yy)
  17.         return xx > yy;
  18.     else
  19.     {
  20.         return x > y;
  21.     }
  22. }
  23. int main()
  24. {
  25.     int *a, n;
  26.     scanf("%d", &n);
  27.     a = new int[n + 2];
  28.     for(int i = 0; i < n; i++)
  29.         scanf("%d", &a[i]);
  30.     sort(a, a + n, cmp1);
  31.     for(int i = 0; i < n; i++)
  32.         printf("%d %d\n", a[i], get_sum(a[i]));
  33. }
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 6 天前 | 显示全部楼层
本帖最后由 yuxijian2020 于 2020-10-17 01:12 编辑
  1. int SumofDigit(const int& num)//计算数字各个位上的和
  2. {
  3.         int temp = num;
  4.         int result = 0;

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

  10.         return result;
  11. }

  12. vector<int> numsSort(vector<int>& nums, int size)
  13. {
  14.         vector<int> temp(size);

  15.         for (int i = 0; i < size; i++)
  16.         {
  17.                 temp[i] = SumofDigit(nums[i]);
  18.         }

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

  29.                                 nums[k] = nums[i] + nums[k];
  30.                                 nums[i] = nums[k] - nums[i];
  31.                                 nums[k] = nums[k] - nums[i];
  32.                         }
  33.                 }
  34.         }

  35.         return temp;
  36. }

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

  42.         int a[5] = {101, 100, 999, 1234, 110};
  43.         int size = sizeof(a) / sizeof(int);

  44.         vector<int> nums(a, a + size);
  45.        
  46.         vector<int> result = numsSort(nums, size);

  47.         for (int i = 0; i < size; i++)
  48.         {
  49.                 cout << nums[i] << " ";
  50.                 cout << result[i] << endl;
  51.         }
  52.        

  53.         system("pause");
  54.         return 0;
  55. }
复制代码


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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
61 
发表于 6 天前 | 显示全部楼层
  1. #include <iostream.h>

  2. //排序类
  3. template<typename T>
  4. class CTempSort  
  5. {
  6. private:
  7.         void tSwap(T * v1,T * v2)
  8.         {
  9.                 T temp = * v1;
  10.                 * v1 = * v2;
  11.                 * v2 = temp;
  12.         }

  13. public:
  14.         //冒泡排序
  15.         void BubbingSort(long nsize, T * buffer)
  16.         {
  17.                 for(long i = 0 ; i < nsize ; i ++)
  18.                 {
  19.                         for(long j = 0 ; j < nsize - i -1; j++)
  20.                         {
  21.                                 if(!(buffer[j] > buffer[j+1]))
  22.                                 {
  23.                                         tSwap(&buffer[j],&buffer[j+1]);
  24.                                 }
  25.                         }
  26.                 }
  27.         }
  28.        
  29.         //选择排序
  30.         void SelectionSort(long nsize,T * buffer)
  31.         {
  32.                 for(long i = 0 ; i < nsize ; i ++)
  33.                 {
  34.                         for(long j = i ; j < nsize ; j++)
  35.                         {
  36.                                 if(!(buffer[i] > buffer[j]))
  37.                                 {
  38.                                         tSwap(&buffer[i],&buffer[j]);
  39.                                 }
  40.                         }
  41.                 }
  42.         }
  43. };

  44. //实现数字类
  45. class CNumber
  46. {
  47. public:
  48.         CNumber()
  49.         {
  50.                 m_number = 0;
  51.                 m_sum = 0;
  52.         };

  53.         CNumber(int num)
  54.         {
  55.                 m_number = num;
  56.                 getSum();
  57.         }

  58.         ~CNumber(){}
  59.        
  60.         CNumber & operator = (int num)
  61.         {
  62.                 m_number = num;
  63.                 getSum();
  64.                 return * this;
  65.         }
  66.        
  67.         //重载赋值操作符 用于排序
  68.         CNumber & operator = (const CNumber & num)
  69.         {
  70.                 m_number = num.m_number;
  71.                 m_sum = num.m_sum;
  72.                 return * this;
  73.         }
  74.        
  75.         //重载 > 操作符,用于排序
  76.         bool operator > (const CNumber & num)
  77.         {
  78.                 if(m_sum > num.m_sum)
  79.                 {
  80.                         return true;
  81.                 }
  82.                 else if(m_sum < num.m_sum)
  83.                 {
  84.                         return false;
  85.                 }
  86.                 else
  87.                 {
  88.                         return m_number < num.m_number ? true : false;
  89.                 }
  90.         }
  91.        
  92.         //重载 cout << 操作符
  93.         friend ostream & operator << (ostream & os,const CNumber & num)
  94.         {
  95.                 cout << num.m_number << " " << num.m_sum << endl;
  96.                 return os;
  97.         }
  98.        
  99.         //重载 cin >> 操作符
  100.         friend istream & operator >> (istream & is,CNumber & num)
  101.         {
  102.                 cin >> num.m_number;
  103.                 num.getSum();
  104.                 return is;
  105.         }

  106. private:
  107.         //计算每位上数字之和
  108.         void getSum()
  109.         {
  110.                 int num = m_number;
  111.                 m_sum = 0;

  112.                 while(num > 0)
  113.                 {
  114.                         m_sum += num % 10;
  115.                         num /= 10;
  116.                 }
  117.         }
  118. private:
  119.         int m_number;
  120.         int m_sum;
  121. };

  122. int main(int argc, char* argv[])
  123. {
  124.         int n;
  125.         //输入数个个数
  126.         cin >> n;
  127.        
  128.         //定义一个 n  的数组
  129.         CNumber * pNumer = new CNumber[n];
  130.        
  131.         //输入 n 个数
  132.         for(int i = 0 ; i < n ; i++)
  133.         {
  134.                 cin >> pNumer[i];
  135.         }

  136.         //排序
  137.         CTempSort<CNumber> sort;
  138.         sort.BubbingSort(n,pNumer);
  139.        
  140.         //输出排序后的数组
  141.         for(i = 0 ; i < n ; i ++)
  142.         {
  143.                 cout << pNumer[i];
  144.         }
  145.        
  146.         //释放内存
  147.         delete [] pNumer;

  148.         return 0;
  149. }

复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 6 天前 | 显示全部楼层
yuxijian2020 发表于 2020-10-17 01:02
排序用了冒泡  时间复杂度有点高,应该凑合吧

有些错误,Dev C++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 6 天前 | 显示全部楼层

有些错误 DevC++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
61 
发表于 6 天前 | 显示全部楼层
什么错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
61 
发表于 6 天前 | 显示全部楼层
这是符合C++标准的程序,如果有错误,请把错误发出来.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
7 
发表于 6 天前 | 显示全部楼层
大学作业之类的
不是应该报一下,你都学了啥了吗
万一用了,理论上你还没学到的知识点
不是被发现了吗
手动 罒ω罒

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 前天 11:09 | 显示全部楼层


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

本版积分规则

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

GMT+8, 2020-10-23 01:38

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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