数组sort排序(从⼩到⼤、从⼤到⼩)
sort命令排序
⽜客⽹编程练习+笔记
题⽬描述
给定任⼀个各位数字不完全相同的4位正整数,如果我们先把4个数字按⾮递增排序,再按⾮递减排序,然后⽤第1个数字减第2个数字,将得到
⼀个新的数字。⼀直重复这样做,我们很快会停在有“数字⿊洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意4位正整数,请编写程序演⽰到达⿊洞的过程。
输⼊描述:
输⼊给出⼀个(0, 10000)区间内的正整数N。
输出描述:
如果N的4位数字全相等,则在⼀⾏内输出“N - N = 0000”;否则将计算的每⼀步在⼀⾏内输出,直到6174作为差出现,输出格式见样例,每⾏中间没有空⾏。注意每个数字按4位数格
式输出。
输⼊例⼦:
6767
输出例⼦:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
数组a[n]排序:
sort()函数默认排序为从⼩到⼤
sort(参数1,参数2,参数3),
参数1:所要排序数组的开始位置;
参数2:所要排序数组的结束位置的下⼀位(从第⼀位开始到第n位:
sort(&a[0],&a[n])或sort(a, a+n));
参数3:缺省或less()代表从⼩到⼤排序,若要从⼤到⼩排序
⽅法1:sort(a[0],a[n],greater())
//great()中greater表⽰更⼤,表⽰数组元素类型为int型
//greater()和less()的头⽂件是(functional),不加亦可运⾏
⽅法2:⾃定义⼀个⽐较⼤⼩的函数⽅法,将⼤的排在前⾯:
bool P(int x,int y){return x>y;}
进⽽sort(a[0],a[n],P)
实例运⽤
#include<functional>
using namespace std;
bool P(int x,int y){return x > y;}//⽅法2 int main()
{
int i =0;
int a[4]={1,8,3,4};
sort(&a[0],&a[4]);
for(; i <4; i++)cout << a[i];
cout << endl;
sort(a, a+4,P);
//sort(&a[0], &a[4], greater<int>());//⽅法1 for(i=0; i <4; i++)cout << a[i];
return0;
}
题解
using namespace std;
int Black(int n)
{
int a[4];
int x =0, y =0, k =1000;
int i =0, j =0;
for(; i <4; i++)
{
a[i]= n / k;
n = n % k;
k /=10;
}
/
/解法1:只排序⼀次
sort(&a[0],&a[4]);
x = a[0]*1000+ a[1]*100+ a[2]*10+ a[3];
y = a[0]+ a[1]*10+ a[2]*100+ a[3]*1000;
/*
解法2:排序两次
sort(&a[0], &a[4], greater<int>());  //从⼤到⼩排序 y = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
sort(&a[0], &a[4]);      //从⼩到⼤排序
x = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
*/
if(x == y)cout << y <<" - "<< x <<" = "<<"0000"; else
{
cout << y <<" - ";
for(i =0; i <4; i++)
cout << a[i];
cout <<" = "<< y - x << endl;
}
return y - x;
}
int main()
{
int n;
cin >> n;
do
{
n =Black(n);
}while(n !=6174&& n !=0);
return0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。