解析:  秒杀法。直接把测试数据所有可能的情况打上,以免超时。

 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 }