黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。
例如,对三位数207:第1次重排求差得:720 - 27 = 693;第2次重排求差得:963 - 369 = 594;第3次重排求差得:954 - 459 = 495;编写程序,实现如下功能:输入一个三位整数,输出将其转换为黑洞数的过程,输入输出格式为: 输入: 207 输出: 1:720-27=693 2:963-369=594 3:954-459=495
编译器:vc++ 6.0
三位黑洞数:495 //三位黑洞数:495 void three_function(int num) { int a,b,c,max,min,temp,i=0; while(num!=495 || i==0) { a=num/100; b=(num%100)/10; c=num%10; if(a<b){temp=a;a=b;b=temp;} if(a<c){temp=a;a=c;c=temp;} if(b<c){temp=b;b=c;c=temp;} max=a*100+b*10+c; min=c*100+b*10+a; num=max-min; if(num==0)//三位数字全部相同时,输出一次结果并跳出循环 { printf("%d:%d - %d = %d\n",++i,max,min,num); break; } else printf("%d:%d - %d = %d\n",++i,max,min,num); } } 四位黑洞数:6174 //四位黑洞数:6174 void four_founction(int num) { int max,min,temp,i=0,j; int a[4]; while(num!=6174 || i==0) { a[0]=num/1000;a[1]=(num%1000)/100;a[2]=(num%100)/10;a[3]=num%10; for(i=0;i<4;i++) for(j=i+1;j<4;j++) if(a[i]<a[j]) { temp=a[i];a[i]=a[j];a[j]=temp; } i=0; max=a[0]*1000+a[1]*100+a[2]*10+a[3]; min=a[3]*1000+a[2]*100+a[1]*10+a[0]; num=max-min; if(num==0)//四位数字全部相同时,输出一次结果并跳出循环 { printf("%d:%d - %d = %d\n",++i,max,min,num); break; } else printf("%d:%d - %d = %d\n",++i,max,min,num); } }以上为考研C语言编程某真题,@_@