1.27日的学习小成果
一.数字黑洞问题
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968
题目如下:
1)不足四位数要在前面补零的书写办法:
printf("%04d - %04d = %04d\n",max,min,n);表明该数字一定占四个空位,若不足四位数则在数字前面补0
(代替了原来笨笨的枚举法)情况太多了,以后用上面方法
eg: if(n==0){
printf("%d - %d = 000%d\n",max,min,n);
}else{
if(min<10){
if(n<1000){
printf("%d - 000%d = 0%d\n",max,min,n);
}else {
printf("%d - 000%d = %d\n",max,min,n);
}
}else if(min<100){
if(n<1000){
printf("%d - 00%d = 0%d\n",max,min,n);
}else {
printf("%d - 00%d = %d\n",max,min,n);
}
}else if(min<1000){
if(n<1000){
printf("%d - 0%d = 0%d\n",max,min,n);
}else {
printf("%d - 0%d = %d\n",max,min,n);
}
}else {
if(n<1000){
printf("%d - %d = 0%d\n",max,min,n);
}else {
printf("%d - %d = %d\n",max,min,n);
}
}
}该题while()里不能写n!=6174&&n!=0如果这样写,当输入数字为6174时,就不会输出任何东西。
不符合题意。
正确的做法应该时while()里面写 1 即可,在循环体里面再判断是否为6174或者0,这样才能保证,每次输入都会进入循环,至少会输出一个东西。
错误代码如下:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int n,sum,i,j,k,max,min;
int a[4];
cin>>n;
while(n!=6174&&n!=0){
for(i=0;i<4;i++){
a[i]=n%10;
n/=10;
}
sort(a,a+4);
max=a[3]*1000+a[2]*100+a[1]*10+a[0];
min=a[0]*1000+a[1]*100+a[2]*10+a[3];
n=max-min;
printf("%04d - %04d = %04d\n",max,min,n);
}
return 0;
} 输出结果如下:
正确代码如下:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int n,sum,i,j,k,max,min;
int a[4];
cin>>n;
while(1){
for(i=0;i<4;i++){
a[i]=n%10;
n/=10;
}
sort(a,a+4);
max=a[3]*1000+a[2]*100+a[1]*10+a[0];
min=a[0]*1000+a[1]*100+a[2]*10+a[3];
n=max-min;
printf("%04d - %04d = %04d\n",max,min,n);
if(n==0||n==6174){
break;
}
}
return 0;
} 输出结果如下:

京公网安备 11010502036488号