问题标题: 酷町堂:7031 探索数字宇宙

0
0
已解决
陈曦
陈曦
资深天翼
资深天翼

90分求助

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
int n;
bool cmp(char a,char b){
	return a>b;
}
string maxn(string a){
	sort(a.begin(),a.end(),cmp);
	return a;
}
string minn(string a){
	sort(a.begin(),a.end());
	return a;
}
int main(){
	scanf("%d",&n);
	while(n!=0||n!=6174){
		string a;
		stringstream b;
		b<<n;
		b>>a;
		string mx=maxn(a);
		string mn=minn(a);
		stringstream bb;
		bb<<mx;
		int mxx;
		bb>>mxx;
		stringstream bbb;
		bbb<<mn;
		int mnn;
		bbb>>mnn;
		n=mxx-mnn;
		printf("%s", mx);
		printf(" - ");
		printf("%s", mn);
		printf(" = ");
		printf("%d",n);
		printf("\n");
		if(n==6174||n==0) break;
	}
	return 0;
}

 

陈曦在2021-08-23 14:20:18追加了内容

@张皓轩 

探索数字宇宙经验值:0

题目描述 Description

现有一个4位且各个位不完全相同的正整数n,若先将n这个正整数上的 4 个数字递减排序得到一个数a,再按递增排序得到一个数b,然后用a减b,将得到一个新的数字。一直重复,最终相减会得到6174,这个数字通常被黑洞之数。
例如,我们从7252开始,将得到:
7522 - 2257 = 5265
6552 - 2556 = 3996
9963 - 3699 = 6264
6642 - 2466 = 4176
7641 - 1467 = 6174

… …
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入描述 Input Description

输入一个正整数n

输出描述 Output Description

若 n的 4 位数字全相等,则在一行内输出 n - n = 0000;
否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。

样例输入 Sample Input

样例输入1: 6767 样例输入2: 3333

样例输出 Sample Output

样例输出1: 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 样例输出2: 3333 - 3333 = 0

数据范围及提示 Data Size & Hint

0<n<=10000


0
已采纳
王文博
王文博
缔造者之神
缔造者之神

先输入一个数n

再来一个**循环

取位数应该都会吧,最多是四位数,于是:

a[1]=b[1]=n%10/1;
        a[2]=b[2]=n%100/10;
        a[3]=b[3]=n%1000/100;
        a[4]=b[4]=n%10000/1000;

数组记得在循环里面定义!

这样四位都知道了

再排个序,这个sort排序都会

a从小到大,b从大到小

排完之后变回四位数,怎么办呢?

int c=b[1]*1000+b[2]*100+b[3]*10+b[4],d=a[1]*1000+a[2]*100+a[3]*10+a[4];

输出要是四位数的格式,所以,我们不输出c,d,直接输出数组!!!!!

cout<<b[1]<<b[2]<<b[3]<<b[4]<<" - "<<a[1]<<a[2]<<a[3]<<a[4]

后面的差就是c-d了。

n=c-d

之后呢,就判断是不是6174或0就可以了,如果是,跳出**循环哦!

望采纳!

0
0
0
0
0
王文博
王文博
缔造者之神
缔造者之神

这题我AC了

等会细讲,这题挺简单的,大佬怎么可能不会?

0
我要回答