大一,C++看一下
辛苦一下,帮着看一下啊#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: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;
}
排序用了冒泡时间复杂度有点高,应该凑合吧 #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;
}
yuxijian2020 发表于 2020-10-17 01:02
排序用了冒泡时间复杂度有点高,应该凑合吧
有些错误,Dev C++ xieglt 发表于 2020-10-17 10:27
有些错误 DevC++ 什么错误? 这是符合C++标准的程序,如果有错误,请把错误发出来. 大学作业之类的
不是应该报一下,你都学了啥了吗
万一用了,理论上你还没学到的知识点
不是被发现了吗
手动 罒ω罒 南城转暖 发表于 2020-10-17 11:07
有些错误,Dev C++
我用了2种编译器(微软的和g++) 都没错啊,你没引入头文件或者没有加命名空间或者数组设置有错或者啥啥啥,报的啥错误我也没看见啊...0.0
页:
[1]