计算出从1到100之间所有奇数的平方之和,scala
2014-07-29 20:32
483 查看
最近开始学scala语言,现在手里有本programming in scala 的中文和英文电子书,但是中文不全(1~13 )算是入门吧,全英文的,看了几眼就晕头转向的了。求大神们翻译下半部吧。
昨天加了两个scala 的QQ群,今天看到一个加群做题的须知,代码作为入群密码。
题目:计算出从1到100之间所有奇数的平方之和
提示:即1*1 + 3*3 +5*5 + ... + 99*99,结果为166650
要求scala代码的长度不超过50个字符,代码越简洁易读越好。
兴趣一来,写了两个实现,但结果均超出50个字符,希望有人返馈更简洁的方法。
package com.scala.exmple
object Odd {
//Java习惯for循环实现100以内奇数的平方相加求和
// def s(x: Int)=x * x
// private var c = 0
// def sum(n: Int):Int ={
// for(i <- 1 to n)
// if(i % 2 != 0)
// c += s(i)
// c
// }
//for循环实现100以内奇数的平方相加求和
def s(x: Int)=x * x
private var c = 0
def oldOddSum(n: Int): Int={
for(i <- 1 to n;if(i % 2 != 0))
yield c += s(i)
c}
//递归实现100以内奇数的平方相加求和
def oddSum(x: Int): Int =
if(x == 1) 1
else if (x % 2 == 0) oddSum(x - 1)
else x * x + oddSum(x - 1)
def main(args: Array[String]): Unit = {}
println(oldOddSum(100))
println(oddSum(100))
}
---------------------------------------<<续
这是群里高手给出的,只用了34个字符
println((1 to 99 by 2).map(x => x * x).sum)
但我修改了下,更容易理解,但是用了50个字符,算是达标了。
val odd100=(for(i<-1 to 100;if(i%2!=0))yield i*i).map(+_).sum
println(odd100)
println("(for(i<-1 to 100;if(i%2!=0))yield i*i).map(+_).sum".length)
昨天加了两个scala 的QQ群,今天看到一个加群做题的须知,代码作为入群密码。
题目:计算出从1到100之间所有奇数的平方之和
提示:即1*1 + 3*3 +5*5 + ... + 99*99,结果为166650
要求scala代码的长度不超过50个字符,代码越简洁易读越好。
兴趣一来,写了两个实现,但结果均超出50个字符,希望有人返馈更简洁的方法。
package com.scala.exmple
object Odd {
//Java习惯for循环实现100以内奇数的平方相加求和
// def s(x: Int)=x * x
// private var c = 0
// def sum(n: Int):Int ={
// for(i <- 1 to n)
// if(i % 2 != 0)
// c += s(i)
// c
// }
//for循环实现100以内奇数的平方相加求和
def s(x: Int)=x * x
private var c = 0
def oldOddSum(n: Int): Int={
for(i <- 1 to n;if(i % 2 != 0))
yield c += s(i)
c}
//递归实现100以内奇数的平方相加求和
def oddSum(x: Int): Int =
if(x == 1) 1
else if (x % 2 == 0) oddSum(x - 1)
else x * x + oddSum(x - 1)
def main(args: Array[String]): Unit = {}
println(oldOddSum(100))
println(oddSum(100))
}
---------------------------------------<<续
这是群里高手给出的,只用了34个字符
println((1 to 99 by 2).map(x => x * x).sum)
但我修改了下,更容易理解,但是用了50个字符,算是达标了。
val odd100=(for(i<-1 to 100;if(i%2!=0))yield i*i).map(+_).sum
println(odd100)
println("(for(i<-1 to 100;if(i%2!=0))yield i*i).map(+_).sum".length)
相关文章推荐
- C#l练习(用方法来实现:分别计算1-100之间的所有整数的和和奇数的和)
- c# 计算1-100之间的所有奇数的和
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- C#l练习(用方法来实现:①判断一个给定的整数是否为“质数”。②计算1-100之间的所有质数(素数)的和
- 计算1~N之间所有奇数之和 oj112
- c# 计算1-100之间的所有质数(素数)的和
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- SQLSerVer计算1-100之间所有能被3整除的数的个数及总和
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34–5 + 67–8 + 9 = 100。
- 9. 描述 计算非负整数 m 到 n(包括m 和 n )之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35。 输入 两个数
- 黑马程序员之C#编程基础学习笔记:用while continue实现计算1到100之间的除了能被7整除之外所有整数的和。
- 计算1-100之间 所有能被3 不能被 5整除的数 的 个数,每行打印 5 个
- 6.4计算并输出1到n之间的所有数的平方和立方
- 计算1-99之间所有奇数的和
- 设计程序,单击【随机数】按钮,使用Math对象的random函数产生一个0-100之间(含0-100)的随机整数,并在对话框中显示,如下图。单击【计算】按钮,计算该随机数的平方、平方根和自然对数,保留两位小数,并在对话框中显示,如下图。
- 计算一个1-100之间所有不能被3整除的和正好大于或者等于2000,看看对不?
- 编程计算1到n之间的所有数的平方和立方(n由键盘输入)
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
- 计算并输出1到n之间的所有数的平方和立方。
- 一个小函数,算出100到999之间的所有的不含5 的奇数