SDUT 2557分段函式Java實現
Problem Description
函式是一種特殊的對映,即數集到數集的對映。對於給定的每個自變數都能給出一個確定的值,這是一件多麼牛的事情呀。其實不是函式牛,而是因為它具有這種性質我們的數學家才這麼定義了它。函式有很多型別,雖然本質都是對映,但為了方便研究和應用,數學家們做了很多分類。比如線性函式,非線性函式,隨機函式,還有一些具有特殊性質的函式等等。
今天我們要關注的是分段函式,所謂分段就是對於整個定義域來說,函式的值域是不連續的。很明顯的一個就是絕對值函式,類似於y=|x|,(x,y屬於R)。不連續是按照自變數的連續變化函式值的變化不連續而已,但函式仍然不離不棄的給了每個自變數一個值。
總之,函式就是按照規則對自變數進行操作得到相應的值。而程式裡的函式就更牛了,它可以對我們的輸入(自變數)進行各種我們想做的操作,最後得到輸出(值),很好玩吧。
今天,就希望你能用程式裡的函式實現數學裡的分段函式,加油哦。
這個分段函式長得是這個樣子的:
F(x) = log2(x) 0<x<10 = |x|+sin(x) x<0 =0 x=0 =x^2 x>=10
Input
輸入包含多組。 第一行給出資料的組數T。 接下來T行每行一個實數X。
Output
輸出T行,每行一個函式值,四捨五入保留到小數點後兩位。 希望你能根據函式的表示式,對於給定的每個自變數不離不棄的計算出它的值。
Sample Input
4 0 10 5 -1 Sample Output
0.00 100.00 2.32 0.16
難實現的地方還是在第一步,要注意的是在Java中 log2N,首先要弄明白一個初中學到的公式log2N=logeN/loge2,logeN代表以e為底的N的對數,loge2代表以e為底的2的對數. 在java.lang.math類中的log(double a)代表以e為底的a的對數,因此log2N在Java中的表示為: log((double)N)/log((double)2),知道這個就容易了。
import java.util.*; public class Main{ public static double HS(double n){ if(n==0) return 0; else if(n>=10) return n*n; else if(n<0) return -1*n+Math.sin(n); else return Math.log(n)/Math.log((double)2); } public static void main(String[] args) { Scanner cin = new Scanner(System.in); double n; int t; while(cin.hasNext()) { t=cin.nextInt(); for(int i=0;i<t;i++) { n=cin.nextDouble(); System.out.printf("%.2f\n",HS(n));} } } }