Swift算法笔记-分子分母

/*
 我们知道分数由分子和分母组成,所以给定你两个正整数,第一的代表分子,第二个代表分母,你能不能把他们化作最简的形式输出?
 例:
 input:
 4 8
 out put:
 1/2
 */

//辗转相除法
func test(molecular:Int, denominator: Int){
    if molecular <= 0 && denominator <= 0 { return }
    let Commondivisor = getCommondivisor(number1: molecular, number2: denominator)
    print("the Greatest Common divisor is \(Commondivisor)")
    print("the minimalist is \(molecular / Commondivisor)/\(denominator / Commondivisor) ")
}

//递归
func getCommondivisor(number1: Int, number2: Int) -> Int {
    let remainder = number1 % number2
    if remainder == 0 {
        return number2
    } else {
        return getCommondivisor(number1: number2, number2: remainder)
    }
}

test(molecular: 100, denominator: 200)

/*
 我们都知道数字的分数形式化简,那当然我们还有字幕形式的分子分母化简,给你两个字母(都是合法的小写形式),请你输出他的最简形式
 例:
 input:
 a ab
 output:
 1/b
 */

//猜想:通过哈希表摘出分子分母分别的字母数量,然后进行删减最后拼装

func test(molecular:String, denominator: String){
    
    var mDic = [Character:Int]()
    var d = ""
    var m = ""
    
    //将分子添加入哈希表
    for mC in molecular.characters{
        if var a = mDic[mC] {
            a += 1
            mDic[mC] = a
        } else {
            mDic[mC] = 1
        }
    }
    
    //遍历分母对哈希表进行删改
    for dC in denominator.characters {
        if var a = mDic[dC] {
            if a != 0 {
                a -= 1
                mDic[dC] = a
            } else {
               d.append(dC)
            }
        } else {
            d.append(dC)
        }
    }
    
    //将哈希表删改后的数据填入分子字符串
    for (v,k) in mDic{
        for _ in 0..<k{
            m.append(v)
        }
    }
    
    //字符串整合
    if m.isEmpty {
        if d.isEmpty {
            print(1)
        } else {
            print("1 / \(d)")
        }
    } else {
        if d.isEmpty {
            print("\(m)")
        } else {
            print("\(m) / \(d)")
        }
    }

}

test(molecular: "aaa", denominator: "aaabbb")

output:

the Greatest Common divisor is 100
the minimalist is 1/2 
1 / bbb
Program ended with exit code: 0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容