記錄下來題目及代碼算是學(xué)習(xí)的過程以后方面查閱 題目介紹:6174猜想 ,1955年,卡普耶卡(D.R.KaPRekar)研究了對四位數(shù)的一種變換:任給出四位數(shù)k0,用它的四個(gè)數(shù)字由大到小重新排列成一個(gè)四位數(shù)m,再減去它的反序數(shù)rev(m),得出數(shù)k1=m-rev(m),然后,繼續(xù)對k1重復(fù)上述變換,得數(shù)k2.如此進(jìn)行下去,卡普耶卡發(fā)現(xiàn),無論k0是多大的四位數(shù), 只要四個(gè)數(shù)字不全相同,最多進(jìn)行7次上述變換,就會(huì)出現(xiàn)四位數(shù)6174. 輸入一個(gè)n位數(shù),操作輸出序列,直到出現(xiàn)循環(huán)(即新得到的數(shù)曾經(jīng)得到過)。輸入保證在循環(huán)之前最多只會(huì)產(chǎn)生1000個(gè)整數(shù)。 輸入: 1234
輸出:
1234-->3087-->8352-->6174-->6174#include<iostream>#include<string.h>#include<algorithm>using namespace std;int cmp(int a, int b) { return a>b ? 1 : 0;}int serb(int *p, int b) { for (int i = 0; i<4; i++) { p[i] = b % 10; b /= 10; } return 0;}int bin(int *p) { int t = p[0]; for (int i = 1; i<4; i++) t = 10 *t + p[i]; return t;}int he(int b) { int p[4], q[4]; serb(p, b); serb(q, b); sort(p, p + 4, cmp); sort(q, q + 4); return bin(p) - bin(q);}intmain(void){ int a, sum[100]; memset(sum,0,sizeof(sum)); cin >> sum[0]; cout<<sum[0]<<"-->"; sum[1]=he(sum[0]);int i=1; for(;;){ sum[i]=he(sum[i-1]); cout<<sum[i]; int found=0; for(int j=0;j<i;j++) if(sum[j]==sum[i]){ found=1;break; } if(found)break; i++; cout<<"-->"; } return 0;}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注