解析: 秒杀法。直接把测试数据所有可能的情况打上,以免超时。
1 #include <stdio.h> 2 #include <math.h> 3 /*static int fun(long n,int a); 4 int main() 5 { 6 int n, f; 7 long m, i, j; 8 while(scanf("%d", &n) == 1){ 9 m = pow(10,n); 10 for(i = 0; i < m; i++) 11 if(fun(i,n)){ 12 printf("%d\n",i); 13 } 14 } 15 return 0; 16 } 17 /*判断是否是自我数*/ 18 /*static int fun(long n,int a) 19 { 20 int x = n / pow(10,a/2); //前面几位 21 int y = n % (int)pow(10,a/2); //前面几位 22 if((x + y) * (x + y) == n) 23 return 1; 24 return 0; 25 }*/ 26 int main() 27 { 28 int n; 29 while(scanf("%d", &n) == 1){ 30 if(n == 2){ 31 printf("00\n"); 32 printf("01\n"); 33 printf("81\n"); 34 } 35 if(n == 4){ 36 printf("0000\n"); 37 printf("0001\n"); 38 printf("2025\n"); 39 printf("3025\n"); 40 printf("9801\n"); 41 } 42 if(n == 6){ 43 printf("000000\n"); 44 printf("000001\n"); 45 printf("088209\n"); 46 printf("494209\n"); 47 printf("998001\n"); 48 } 49 if(n == 8){ 50 printf("00000000\n"); 51 printf("00000001\n"); 52 printf("04941729\n"); 53 printf("07441984\n"); 54 printf("24502500\n"); 55 printf("25502500\n"); 56 printf("52881984\n"); 57 printf("60481729\n"); 58 printf("99980001\n"); 59 } 60 } 61 return 0; 62 }