循环圈
任意一個5位數,比如:34256,把它的各位數字打亂,重新排列,可以得到一個最大的數:65432,一個最小的數23456。求這兩個數字的差,得:41976,把這個數字再次重復上述過程(如果不足5位,則前邊補0)。如此往復,數字會落入某個循環圈(稱為數字黑洞)。
比如,剛才的數字會落入:[82962,75933, 63954, 61974] 這個循環圈。
?
請編寫程序,找到5位數所有可能的循環圈,并輸出,每個循環圈占1行。其中5位數全都相同則循環圈為 [0],這個可以不考慮。
?
循環圈的輸出格式仿照:
[82962, 75933, 63954, 61974]
#include <iostream> #include<cstring> #include<algorithm> using namespace std;int a[100]; int count1=0; int bj; int off(int n,int t)//t==0求最小值t==1求最大值 {int num[5];memset(num,0,sizeof(num));int k=0;while(n){num[k]=n%10;n=n/10;k++;}sort(num,num+5);int max=0,min=0;if(t==0)//返回最小值{min=num[4]+num[3]*10+num[2]*100+num[1]*1000+num[0]*10000;return min;}else//返回最大值{max=num[0]+num[1]*10+num[2]*100+num[3]*1000+num[4]*10000;return max;} } bool check(int ch)//檢查 {for(int i=0; i<count1; i++){if(a[i]==ch){bj=i;return true;}}return false; } void f(int n)//計算 {int max=off(n,1);int min=off(n,0);int ch=max-min;if(check(ch))return;else{a[count1]=ch;count1++;f(ch);}}int main() {int n;cin>>n;memset(a,0,sizeof(0));f(n);//輸出cout<<"[";for(int i=bj; i<count1; i++){cout<<a[i];if(i!=count1-1)cout<<",";}cout<<"]";cout<<endl;return 0; }《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結