树的同构问题(树的最小表示法)?
的有关信息介绍如下:
所谓的同构数就是一个数是它的平方的右侧。例如5的平方25,25的平方625,诸如此类,所以5、25都是同构数。比如问1-10000里有多少个同构数。我给你看两个相对简单好理解的代码~~~#include #include int Test(int a, int b){ while(a != 0) { if(a%10 != b%10) return 0; a /= 10; b /= 10; } return 1;}void main(void){ int i; for(i = 0; i < 10000; ++i) { if(Test(i, i*i)) printf("%d - %d\n", i, i*i); } system("pause");}算法原理是将个位取出来比较 如果不等 那肯定不是如果相等了 则除以10 那么百位就变成个位了重复上述步骤 知道小的数位0 那么比较就完成了#include int check(int org, int sqr){ int tmp, rhs, fac; tmp = org; rhs = 0; fac = 1; while(tmp > 0) { rhs += sqr % 10 * fac; fac *= 10; tmp /= 10; sqr /= 10; } return rhs == org;}int main(){ int i, c; for(c = 0, i = 1; i <= 10000; ++i) { if(check(i, i*i)) printf("No.%d %d->%d\n", ++c, i, i*i); } return 0;} 献丑啦~~~你自己先看起吧~~~~