重新做华为的机试题

MrWusenshan · 2020-05-26 23:23:44 · 4424 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2020-05-26 23:23:44 的文章,其中的信息可能已经有所发展或是发生改变。

重新写一道华为机试算法题


很少做算法题,上次做华为算法题没准备,做的时候完全是懵的,反倒是现在想起来了,就来说说这道题怎么做.
现在也只是记住当时的大概意思,将就着理解吧:


就是输入两个数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

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