1019 数字黑洞 (20分)
程序员文章站
2022-03-13 13:37:23
...
#include<stdio.h>
#include<algorithm>
using namespace std;
int num[4],num1[4],num2[4];
void getnum(int a){
for(int i=0;i<4;i++){
num[i]=a%10;
a=a/10;
}
}
bool cmp(int a,int b){
return a>b;
}
int main(){
int a,b1=0,b2=0,b=0;
scanf("%d",&a);
int ans=0;
getnum(a);
for(int i=1;i<4;i++){
if(num[i]==num[i-1])ans++;
}
if(ans==3)printf("%d - %d = 0000\n",a,a);
else{
while(b!=6174){
sort(num,num+4,cmp);
for(int i=0;i<4;i++){
num1[i]=num[i];
}
b1=num1[0]*1000+num1[1]*100+num1[2]*10+num1[3];
sort(num,num+4);
for(int i=0;i<4;i++){
num2[i]=num[i];
}
b2=num2[0]*1000+num2[1]*100+num2[2]*10+num2[3];
b=b1-b2;
getnum(b);
printf("%04d - %04d = %04d\n",b1,b2,b);
}
}
}
第一次,独立完成,25min
#include<stdio.h>
#include<algorithm>
using namespace std;
int num[4];
void to_arrayy(int a){
for(int i=0;i<4;i++){
num[i]=a%10;
a=a/10;
}
}
int to_number(int num[]){
int sum=0;
for(int i=0;i<4;i++){
sum=sum*10+num[i];
}
return sum;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
int a,b1=0,b2=0,b=-1;
scanf("%d",&a);
to_arrayy(a);
while(b!=6174&&b!=0){
sort(num,num+4,cmp);
b1=to_number(num);
sort(num,num+4);
b2=to_number(num);
b=b1-b2;
to_arrayy(b);
printf("%04d - %04d = %04d\n",b1,b2,b);
}
return 0;
}
第一次,参考算法笔记进行优化,25min
#include<stdio.h>
#include<algorithm>
using namespace std;
int num[4];
void to_arrayy(int a){
for(int i=0;i<4;i++){
num[i]=a%10;
a=a/10;
}
}
int to_number(int num[]){
int sum=0;
for(int i=0;i<4;i++){
sum=sum*10+num[i];
}
return sum;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
int a,b1=0,b2=0;
scanf("%d",&a);
while(1){
to_arrayy(a);
sort(num,num+4,cmp);
b1=to_number(num);
sort(num,num+4);
b2=to_number(num);
a=b1-b2;
printf("%04d - %04d = %04d\n",b1,b2,a);
if(a==6174||a==0)break;
}
return 0;
}
第一次,优化
上一篇: 牛客练习赛72—B:brz的雪糕
下一篇: 1019 数字黑洞 (20分)