开始刷题,感觉代码量和基础太渣了,导致数据结构不会,重头慢慢刷吧~
1、题目
输入样例:
123
输出样例:
1: 321 - 123 = 198
2: 981 - 189 = 792
3: 972 - 279 = 693
4: 963 - 369 = 594
5: 954 - 459 = 495
2、代码
#include<stdio.h>
int main(){
int N,a=0,b=0,c=0;
scanf("%d",&N);
int max=-1,min=1000,cnt=1;
int temp=N;
int maxDigit, minDigit, midDigit;
while(1){
a=temp/100;
b=temp/10%10;
c=temp%100%10;
if(a>=b && a>=c){
maxDigit = a;
}
else if(b>=a && b>=c){
maxDigit = b;
}
else{
maxDigit = c;
}
if(a<=b && a<=c){
minDigit = a;
}
else if(b<=a && b<=c){
minDigit = b;
}
else{
minDigit = c;
}
midDigit = a+b+c-maxDigit-minDigit;
max = maxDigit*100+midDigit*10+minDigit;
min = minDigit*100+midDigit*10+maxDigit;
temp=max-min;
printf("%d: %d - %d = %d
",cnt,max,min,temp);
if(temp==0||temp==495) break;
cnt++;
max=-1,min=1000;
}
return 0;
}
3、讨论
这个题很有意思的哈,本来以为就是个 “简单” 题,用循环来计算最大值最小值,果然超时了。。。
#include<stdio.h>
int main(){
int N,a=0,b=0,c=0;
scanf("%d",&N);
int max=-1,min=1000,cnt=1;
int temp=N;
while(1){
a=temp/100;
b=temp/10%10;
c=temp%100%10;
int n[6]={0};
n[1]=100*a+10*b+c;
n[2]=100*a+10*c+b;
n[3]=100*b+10*a+c;
n[4]=100*b+10*c+a;
n[5]=100*c+10*b+a;
n[6]=100*c+10*a+b;
int i;
for(i=1;i<=6;i++){
if(n[i]>max){
max=n[i];
}
}
for(i=1;i<=6;i++){
if(n[i]<min){
min=n[i];
}
}
temp=max-min;
printf("%d: %d - %d = %d
",cnt,max,min,temp);
if(temp==0||temp==495) break;
cnt++;
max=-1,min=1000;
}
return 0;
}
上网一搜,新的方法是分别取 a,b,c
的最大值和最小值进行组合,这样就不用循环了,很好用!
妙啊!!!