第四届蓝桥杯C/C++ A组第二题,题目如下:
小明正看着 203879 这个数字发呆。原来,203879 * 203879 = 41566646641。这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
首先把代码贴上来吧:
1 #include<errno.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<stdarg.h> 5 #include<stdio.h> 6 int main(int argc,char *argv[]) 7 { 8 char num[6]; 9 char *endptr; 10 endptr = num + 6; 11 12 /**********************************构造六位数****************************************/ 13 for(num[0]='1';num[0]<='9';num[0]++){ 14 for(num[1]='0';num[1]<='9';num[1]++){ 15 if(num[1]==num[0]) continue; 16 17 for(num[2]='0';num[2]<='9';num[2]++){ 18 if(num[2]==num[0] || num[2]==num[1]) continue; 19 20 for(num[3]='0';num[3]<='9';num[3]++){ 21 if(num[3]==num[0] || num[3]==num[1] || num[3]==num[2]) continue; 22 23 for(num[4]='0';num[4]<='9';num[4]++){ 24 if(num[4]==num[0] || num[4]==num[1] || num[4]==num[2] || num[4]==num[3]) continue; 25 26 for(num[5]='0';num[5]<='9';num[5]++){ 27 if(num[5]==num[0] || num[5]==num[1] || num[5]==num[2] || num[5]==num[3] || num[5]==num[4]) continue; 28 /**********************************End***********************************************/ 29 30 /**********************************对构造出来的数的进行判断****************************************/ 31 long long numll; 32 long long resultll; 33 numll = strtol(num,&endptr,10); 34 resultll = numll * numll; 35 char result[20]; 36 memset(result,0,20); 37 int loopi; //用来遍历那个六位数的每一位 38 39 snprintf(result,20,"%lld",resultll); 40 41 for(int loop=0;loop<strlen(result);loop++) 42 { 43 for(loopi=0;loopi<6;loopi++) 44 { 45 if(result[loop] == num[loopi]) 46 break; 47 } 48 if(loopi < 6) 49 break; 50 } 51 if(6 == loopi) 52 printf("%lld -- %s\n",numll,result); 53 /******************************************End***************************************************/ 54 } 55 } 56 } 57 } 58 } 59 } 60 61 62 return 0; 63 }