http://jsensor.blogspot.com/2008/06/blog-post.html
Задача стояла написать рекурсивную функцию для вычисления факториала натурального числа n.
Ниже приведен мой код, как оказалось я вычислил факториал но без применения рекурсивной функции, второй код точно по условию задачи показан моим наставником Тимуром.
- class Math3
- {
- int getFuc(int n)
- {
- int i;
- int fuc=1;
- for (i=1; i<n+1;i++)
- {
- fuc=fuc*i;
- }
- return fuc;
- }
- }
- class FuctDemo
- {
- public static void main (String[] args)
- {
- Math3 f=new Math3();
- System.out.println ("Факториал="+f.getFuc(3));
- }
- }
- public class Factorial {
- int getFactorial(int i) {
- if (i==0)
- return 1;
- return i*getFactorial(i-1);
- }
- public static void main(String[] args) {
- Factorial f = new Factorial();
- System.out.println(f.getFactorial(6));
- }
- }
Приклад 3.
Найменше спільне кратне http://www.e-olimp.com/ua/problems/3733
Обчисліть найменше спільне кратне усіх цілих чисел від 1 до N.
Технічні умови
Вхідні дані
Вхідний файл містить натуральне число n (1 ≤ n ≤ 30).
Вихідні дані
Виведіть ціле число - відповідь до задачі.
Інформація про задачу
Ліміт часу: 1 секундаЛіміт пам`яті: 64 MB
Бали за пройдений тест: 16.6667
Мої результати: 1/1
Приклад
Приклад вхідних даних3 | Приклад вихідних даних6 |
Розв'язок
import java.util.*;import java.io.*;
public class Main{
public static void main(String[] argv) throws IOException{
new Main().run();
}
//функція знаходження найбільшого спільного дільника
long NOD(long a,long b){
while (a!=0 && b!=0){
if (a > b) a = a % b; //для збільшення швидкості робимо через остачу від ділення
else b = b % a;
}
a=a+b;
return a;
}
//функція знаходження найбільшого спільного кратного
long NOK(long a,long b){
//згідно означення НСК=a*b/НОД(a,b)
//але щоб зменшити ймовірність виходу за межі розрядності
//спочатку ділимо більше, а потім множимо на менше
long aa,bb;
if (a>b) {aa=a;bb=b;}
else {aa=b;bb=a;}
return aa/NOD(a,b)*bb;
}
PrintWriter pw;
Scanner sc;
public void run() throws IOException{
sc = new Scanner(new File("input.txt"));
long n=sc.nextInt();
pw = new PrintWriter(new File("output.txt"));
long NOKr=1;
//знаходимо НСК для поперднього НСК та наступного числа
for (int i=2; i<=n; i++){
NOKr=NOK(i,NOKr);
}
pw.println(NOKr);
pw.close();
}
}
Приклад 4.
Використовуй функцію http://www.e-olimp.com/ua/problems/920
Задано три дійсні числа х, у та z. Обчислити min(max(x,y), max(y,z), x+y+z), скориставшись допоміжними функціями для обчислення мінімального та максимального значення з двох елементів.
Технічні умови
Вхідні дані
В єдиному рядку задано три дійсні числа х, у i z, відокремлені пропуском. Значення чисел не перевищують за модулем 100.
Вихідні дані
Вивести відповідь з точністю до 2 знаків після десяткової крапки.
Ліміт часу: 0.5 секунди
Бали за пройдений тест: 4
Складність: 10%
Джерело: ДПА-2010 Варіант 20
Бали за пройдений тест: 4
Складність: 10%
Джерело: ДПА-2010 Варіант 20
Приклад
Приклад вхідних даних1.05 2.25 2.15 |
Приклад вихідних даних2.25 |
Розв'язок
Використаємо дві функції max та min.import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] argv) throws IOException{
new Main().run();
}
double min(double a,double b, double c){
if (a>b) { if (b>c)
return c;
else return b;
}
else { if (a>c)
return c;
else return a;
}
}
double max(double a,double b){
if (a<b) return b;
else return a;
}
PrintWriter pw;
Scanner sc;
public void run() throws IOException{
sc = new Scanner(new File("input.txt"));
pw = new PrintWriter(new File("output.txt"));
//pw = new PrintWriter(System.out);
sc.useLocale(new Locale("US"));
double x=sc.nextDouble();
double y=sc.nextDouble();
double z=sc.nextDouble();
pw.printf(Locale.US,"%.2f\n", min(max(x,y), max(y,z), x+y+z));
pw.close();
}
}
Немає коментарів:
Дописати коментар