中易网

树的同构问题(树的最小表示法)?

答案:3  悬赏:70  
解决时间 2021-04-27 06:21
  • 提问者网友:房东的猫
  • 2021-04-27 02:20

哪位大牛帮帮解释一下吗?

网上代码很多,但看不懂,希望哪位能帮下忙,感激不尽!!!!!

最好能附上有解释的代码!~~~~~

谢谢!!

最佳答案
  • 二级知识专家网友:情战凌云蔡小葵
  • 2021-04-27 03:59

你要用什么语言表示?

全部回答
  • 1楼网友:眠于流年
  • 2021-04-27 05:21

合肥赛区网络赛的题目吧,今年的题目真恶心,两道同构题,还是最原始的那种,不就是比谁的模板比较强大吗。。

  • 2楼网友:为你轻狂半世殇
  • 2021-04-27 05:09

所谓的同构数就是一个数是它的平方的右侧。例如5的平方25,25的平方625,诸如此类,所以5、25都是同构数。比如问1-10000里有多少个同构数。

我给你看两个相对简单好理解的代码~~~

#include <stdio.h> #include <stdlib.h> 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 <stdio.h> 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; } 献丑啦~~~你自己先看起吧~~~~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息