重新做华为的机试题

MrWusenshan · · 4130 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

#### 重新写一道华为机试算法题 *** 很少做算法题,上次做华为算法题没准备,做的时候完全是懵的,反倒是现在想起来了,就来说说这道题怎么做. 现在也只是记住当时的大概意思,将就着理解吧: *** 就是输入两个数N,M,且N<M,找出并打印N,M两个数之间互为质数的勾股数组,例如N=1,M=10,打印的结果为3,4,5(升序),而另一组勾股数6,8,10不是互质的就不打印,如果N,M,之间没有一组这样的数就打印NA. *** 由于忘了两个数互质的条件,当时没做出来,现在才想起来只要判断两个数的因数都没有2,3,5,那么这两个数就互质,现在一组数有三个,就要判断两两互质的情况,只要有一对数不互质就不满足三数互质. 代码奉上: ``` package main import "fmt" func tool(a, b, c int) bool { //任意两个参数有约数2 if (a%2 == 0 && b%2 == 0) || (a%2 == 0 && c%2 == 0) || (b%2 == 0 && c%2 == 0) { return false } //约数3 if (a%3 == 0 && b%3 == 0) || (a%3 == 0 && c%3 == 0) || (b%3 == 0 && c%3 == 0) { return false } //约数5 if (a%5 == 0 && b%5 == 0) || (a%5 == 0 && c%5 == 0) || (b%5 == 0 && c%5 == 0) { return false } return true } var n = 0 //标记组数 func main() { N := 0 M := 0 fmt.Scan(&N) fmt.Scan(&M) for a := N; a < M-2; a++ { aa := a * a for b := a + 1; b < M-1; b++ { bb := b * b for c := b + 1; c <= M; c++ { cc := c * c if aa+bb == cc { if tool(a, b, c) { n++//组数+1 fmt.Println(a, b, c) } } } } } if n == 0 { fmt.Println("NA") } } ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4130 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传