Swift 算法练习

来源:互联网 发布:unity3d卡牌游戏教程 编辑:程序博客网 时间:2024/05/21 08:40

编写一个程序,能交换两个变量的数值
例如: 变量a值为20,变量b值为30,调用函数后,a的值变为30,b 的值变为20

答案:   -func swap(a: inout Int , b:inout Int){            let temp = a             a = b            b = temp        }        var x = 20 , y = 30        swap(a:&x , b:&y)        print(x,y)

编写一个程序,求1! + 2! + 3! + 4!的和
要求:使用嵌套定义函数实现

答案: func getSum(number: Int) -> Int {    //求某个数阶乘的结果    func getFactorIal(num: Int) -> Int {        var sum = 1        for _ in 1...num {            sum += 1        }        return sum    }    var total = 0    for item in 1...number {        total += getFactorIal(num: item)    }    return total}print(getSum(number: 3))

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

答案:func getFinboNum(num: Int) ->Int{            if num == 1 || num == 2 {             return 1            }        return (getFinboNum(num: num - 1) + getFinboNum(num: num - 2))}for month in 1...10{    print("\(month):\(getFinboNum(num: month))")}

打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方

答案 :for number in 100...999{    var hunder = number / 100    var ten = number / 10 % 10    var num = number % 10   let sum = pow(Decimal(hunder), 3) + pow(Decimal(ten), 3) +  pow(Decimal(num), 3)    if sum == Decimal(number){        print(number)    }}   

编写一个程序,要求可以把一个字符串中的每一个字符,如果是大
写字母变小写字母,如果是小写字母变大写,如果是其他字符不变
例如: 字符串China23beiJing 经过程序转换为cHINA23BEIjING

答案:/* 函数,将大写字母变小写,小写字母变大写,其他不变 */func changeCharcter (chNum:Character) -> Character {    //将字符转成整数    var chStr = String(chNum)   //将字符转成字符串    var num:UInt32 = 0  //用于接受字符整数值的变量    for item in chStr.unicodeScalars {        num = item.value    //循环只执行一次,获取字符的整数的值    }    /*     如果是大小写字母,转换数值     */    //如果是大写字母    if num >= 65 && num <= 90 {        num += 32    }        //如果是小写字母    else if num >= 97 && num <= 122 {        num -= 32    }    /*     将整数转换为字符     */    let newChNum = Character(UnicodeScalar(num)!)    return newChNum}var str = "China23beiJing "var i = 0   //表示偏移量(循环变量初始值)while i < str.characters.count {    //循环条件,包含循环变量的终止值    var str1 = str[str.index(str.startIndex, offsetBy: i)]//    str1 = changeCharcter(chNum: str1)    str.replaceSubrange(str.index(str.startIndex, offsetBy:        i)...str.index(str.startIndex, offsetBy: i),                           with: String(changeCharcter(chNum: str1)))    i+=1;   //循环变量值变化}print(str)

编写一个程序,要求接收一个数字,程序会将这个数字以二进制方
式打印,例如:数字10 , 以1010的方式打印出来

答案 :    func binaryPrintIntNumber(num : Int) {    var remainderArr:[Int] = []  //int数组,存储余数    var quotient:Int = num  //表示商的变量,初始值是num    while quotient > 0 {   //商的值是0        let remainderNum = quotient % 2 //获取余数的值        remainderArr.insert(remainderNum, at: 0)    //插入数组        quotient /= 2   //商变换    }    for item in remainderArr {        print(item, terminator: "")    }    print("")}var a = 10binaryPrintIntNumber(num: a)print(a)

编写一个程序,判断101-200之间有多少个素数,并输出所有素数

答案:    var isPreimNum = true   //判断是否是素数,是就是true不是就是falsevar sum = 0for item in 101...200 {     //遍历101到200中的任意数    for j in 2..<item {     //判断item是不是素数        if item % j == 0 {            isPreimNum = false            break        }    }    if isPreimNum {     //如果是素数        print(item)     //打印这个素数        sum += 1    }    isPreimNum = true}print(sum)}

编写一个程序,查看1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

var sum1 = 0  //定义变量用于记录个数for hudder in 1...4 {   //百位    for ten in 1...4 {  //十位        for num in 1...4 {  //个位            if hudder != ten && hudder != num && ten != num {                print(hudder*100 + ten*10 + num)                sum1 += 1   //计算个数            }        }    }}print(sum1)
原创粉丝点击