[蓝桥杯]排它平方数
题目标题: 排它平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。
我的做法 回溯构造6位正整数 + 大整数乘法
答案是这几个数:

与 http://blog.csdn.net/on_way_/article/details/8894534 此博客中的答案不同.
但此文中 有答案 : 346789 而 346789* 346789 = 120262610521 发现结果和原乘数中都含有6,不合题意.
附代码,望指正:
1 #include <stdlib.h> 2 #include <string.h> 3 4 int start[] = {1,0}; 5 using namespace std; 6 unsigned long a; 7 char lNum[10]; 8 char lRes[20]; 9 int numLength,ResLength; 10 void mutiply(); 11 int MyCompare(const void* a,const void* b) 12 { 13 return (int)(*(char*)a-*(char*)b); 14 } 15 void convert() 16 { 17 for (unsigned long t=a;t;t/=10) 18 { 19 lNum[numLength++] = t%10; 20 } 21 mutiply(); 22 } 23 void mutiply() 24 { 25 int i,j,k=0,q=0; 26 for (i=0;i<numLength;i++) 27 { 28 29 for (j=0;j<numLength;j++) 30 { 31 lRes[k++] += lNum[i]*lNum[j]; 32 if (lRes[k-1]>=10) 33 { 34 35 lRes[k] += lRes[k-1]/10; 36 lRes[k-1]=lRes[k-1]%10; 37 //lRes[k-1] /= 10; 38 } 39 } 40 if (k>ResLength) 41 { 42 ResLength = k; 43 } 44 k=i+1; 45 } 46 47 48 } 49 bool check(int n) 50 { 51 int i,j; 52 convert(); 53 54 55 56 for (i=0;i<numLength;i++) 57 { 58 for (j=0;j<ResLength;j++) 59 { 60 if (lNum[i]==lRes[j]) 61 { 62 return false; 63 } 64 } 65 } 66 return true; 67 68 } 69 bool unique(int n,int l) 70 { 71 char szNum[10]; 72 itoa(n,szNum,10); 73 74 qsort(szNum,l,sizeof(char),MyCompare); 75 for (int i=0;i<l;i++) 76 { 77 if (szNum[i]==szNum[i+1]) 78 { 79 return false; 80 } 81 } 82 return true; 83 } 84 85 void rescurtive(int k) 86 { 87 int i,j; 88 if (k>=6 ) 89 { 90 if (check(a)) 91 { 92 printf("%u\n",a); 93 } 94 memset(lNum,0,10); 95 memset(lRes,0,20); 96 ResLength = numLength = 0; 97 98 99 } 100 else 101 { 102 103 for (i=start[k!=0];i<=9;i++) 104 { 105 int t=a; 106 107 a = a*10+i; 108 if(unique(a,k+1)) 109 { 110 rescurtive(k+1); 111 } 112 a =t; 113 114 } 115 } 116 } 117 int main() 118 { 119 120 121 rescurtive(0); 122 123 return 0; 124 }
浙公网安备 33010602011771号