пятница, 30 сентября 2011 г.

Случайные числа – еще несколько задач


Размешаю еще несколько задач на случайные числа: есть среди них и те, что попроще, а есть и посложнее.
Удачи!

Задание №1
Напиши класс, который принимает с клавиатуры целое число для переменной N и выводит на экран N случайных чисел, значения которых по абсолютному значению не больше N.

Задание №2
Напиши класс, который принимает с экрана целочисленные значения для переменных А, В и N – и выводит на экран серию из N случайных чисел из диапазона между А и В (неизвестно, какая из этих двух переменных содержит большее значение).

Задание №3
Напиши класс, который принимает с экрана целые числа для переменных К и N – и выводит на экран 10 случайных чисел, делящихся на К с частным, не превышающим N.

Задание №4
Напиши класс, который выводит на экран 30 целых случайных чисел из диапазона от 15 до 35, моделирующих ежедневные измерения температуры воздуха в течение месяца.
Класс должен определить:
  1. сколько раз в течение месяца было зафиксировано повешение температуры " с сегодня на завтра"
  2. сколько раз в течение месяца было зафиксировано изменение тенденции – с повышения температуры на понижение;
  3. сколько раз в течение месяца было зафиксировано изменение тенденции – с понижения температуры на повышение;
  4. максимальную и минимальные температуры воздуха;
  5. месяц называется аномальным, если среднее арифметическое между минимальной и максимальной температурами отличается более чем на 5 градусов от среднемесячной – следует определить, был ли месяц аномальным или нет.


19 комментариев:

  1. Задание №2
    import java.util.*;
    class n2
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String []args)
    {
    int a,b,n,max,min,i,x;
    a=reader.nextInt();
    b=reader.nextInt();
    n=reader.nextInt();
    if(a>b)
    {
    max=a;
    min=b;
    }
    else
    {
    max=b;
    min=a;
    }
    for(i=0;i<n;i++)
    {
    x=(int)(Math.random()*(max-min)+min);
    System.out.print(x+" ");
    }
    }
    }

    ОтветитьУдалить
  2. Сергей, в твоем решении надо сделать одно изменение: в генераторе случайных чисел надо написать (max-min+1) -- то есть добавить единицу к разности наибольшего и наименьшего.
    Это связано с особенность работы Math.random(): генерируются десятичные дроби от 0 до 1, НО! Включая 0, однано НЕ ВКЛЮЧАЯ 1 -- то есть надо добавлять 1, чтобы сгенерировалась и верхняя граница диапазона.

    ОтветитьУдалить
  3. К сожалению не смог вспомнить все, что вы объясняли про генератор случайных чисел поэтому такая ошибка.
    Собственно вот остальные задания, сразу не выложил так как блог странно работал и коментарии сразу пропадали =(
    import java.util.*;
    class n1
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String []args)
    {
    int n,i,n1;
    n=reader.nextInt();
    for(i=0;i<n;i++)
    {
    n1=(int)(Math.random()*2*n-n);
    System.out.print(n1+" ");
    }
    }
    }

    ОтветитьУдалить
  4. Задание №3
    import java.util.*;
    class n3
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String []args)
    {
    int k,n,i,x,d;
    k=reader.nextInt();
    n=reader.nextInt();
    i=0;
    while(i<=10)
    {
    x=(int)(Math.random()*1000*k+k);
    d=x/k;
    if(d<n)
    {
    System.out.print(x+" ");
    i=i+1;
    }
    }
    }
    }

    ОтветитьУдалить
  5. Сергей, с учетом того, о чем мы говорили по поводу генератора случайных чисел: надо переделать строчку n1=(int)(Math.random()*2*n-n);

    ОтветитьУдалить
  6. Предудыщий комментарий относился в решению задачи №2.

    А теперь по поводу задачи №3 -- у меня несколько замечаний.
    Верно ли я понимаю, что цикл while ты использовал, что называется, "не от хорошей жизни"? Потому что не было понятно, получится ли у тебя нужное частное?
    Я думаю, что проблема в использовании 1000 в генераторе случайного числа: почему именно 1000? Почему, например, не 3000 или не 10000?
    Строго говоря, из-за этого решение не соответствует требованию, сформулированному в условии.
    Задача имеет решение с циклом for, и генератор надо написать иначе.
    И не забудь про 1!)))

    ОтветитьУдалить
  7. import java.util.*;
    class Zadanie_3
    {
    static Scanner reader = new Scanner (System.in);
    public static void main (String [] args)
    {
    int x,i,k,n;
    k=reader.nextInt ();
    n=reader.nextInt ();
    for(i = 1; i<11; i++)
    {
    x=(int)((k*n+k)*Math.random())+1;
    if (x/k<=n)
    System.out.print (x+" ") ;
    }
    }
    }

    ОтветитьУдалить
  8. Третья задача оказалась с "зубами"...

    Annie, в твоем варианте есть прблема с генерацией случайного числа.
    Например: если k=5, n=8, то самое большое число должно быть (по смыслу условия) 40 (делится на 5 с частным 8).

    А из строчки x=(int)((k*n+k)*Math.random())+1; получается, что х может иметь значение 45...

    Кстати, у всех проблема с этой строчкой.

    ОтветитьУдалить
  9. import java.util.*;
    class Zadanie_2
    {
    static Scanner reader = new Scanner (System.in);
    public static void main (String [] args)
    {
    int x,i,a,b,n;
    a= reader.nextInt ();
    b= reader.nextInt ();
    n=reader.nextInt ();

    for(i = 1; i<=n; i++)
    {
    if (a<b)
    {
    x=(int)((b-a+1)*Math.random())+a;
    System.out.print (x+" ") ;
    }
    else
    { x=(int)((a-b+1)*Math.random())+b;
    System.out.print (x+" ") ;
    }
    }
    }
    }

    ОтветитьУдалить
  10. Но ведь если разделить 41 на 5, частное тоже будет равно 8

    ОтветитьУдалить
  11. Annie, вторая задача в порядке.

    А в третьей может получиться 45 -- и из-за этого единственного числа проблемы(((

    ОтветитьУдалить
  12. А так?

    import java.util.*;
    class Zadanie_3
    {
    static Scanner reader = new Scanner (System.in);
    public static void main (String [] args)
    {
    int x,i,k,n,m;
    k= reader.nextInt ();
    n=reader.nextInt ();
    m=k-1;
    for(i = 1; i<11; i++)
    {
    x=(int)((k*n+m)*Math.random())+1;
    if (x/k<=n)
    System.out.print (x+" ") ;
    }
    }
    }

    ОтветитьУдалить
  13. Так максимальное возможное число будет 44 -- и условие будет выполняться, да.

    Кстати, if в таком варианте не нужен, хотя и не мешает, разумеется: все равно все генерируемые числа и так годятся.

    ОтветитьУдалить
  14. Номер три вариант в котором результат работы программы только числа при деление которых на к частное меньше n и при этом остаток равен 0.
    import java.util.*;
    class n3a
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String []args)
    {
    int k,n,i,x;
    k=reader.nextInt();
    n=reader.nextInt();
    for(i=1;i<=10;i++)
    {
    x=(int)(Math.random()*n+1)*k;
    System.out.print(x+" ");
    }
    }
    }

    Задание №4
    import java.util.*;
    class n4
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String []args)
    {
    int p,p1,u,max,min,x,i,x1,i1;
    double s,s1,r;
    x=1;
    x1=1;
    p=0;
    p1=0;
    u=0;
    max=0;
    min=35;
    i1=2;
    s=0;
    for(i=0;i<30;i++)
    {
    x=(int)(Math.random()*21+15);
    s=s+x;
    if(x>max) max=x;
    if(xx1) p1++ ;
    if(x>x1&&i1==1) p++ ;
    if(xx1) i1=1; else i1=0;
    x1=x;
    System.out.print(x+" ");
    }
    System.out.println(" ");
    System.out.println("Максимальная температура "+max);
    System.out.println("Минимальная температура "+min);
    System.out.println("число повышений температуры с сегодня на завтра "+p1);
    System.out.println("число повышений температуры "+p);
    System.out.println("число понижений температуры "+u);
    s=s/30;
    s1=(max+min)/2;
    if(s>s1) r=s-s1;
    else r=s1-s;
    if(r>5) System.out.println("месяц аномальный");
    else System.out.println("месяц не аномальный");
    }
    }

    ОтветитьУдалить
  15. import java.util.*;
    class z9_1
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String[] args)
    {
    int i,n,x;
    n=reader.nextInt();
    for (i=1; i<=n; i++)
    {
    x=(int)(Math.random()*(2*n+1))-n;
    System.out.print(x+" ");
    }
    }
    }

    import java.util.*;
    class z9_2
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String[] args)
    {
    int i,n,x,a,b;
    a=reader.nextInt();
    b=reader.nextInt();
    n=reader.nextInt();
    if (b>a)
    {
    x=a;
    a=b;
    b=x;
    }
    for (i=1; i<=n; i++)
    {
    x=(int)(Math.random()*(a-b+1))+b;
    System.out.print(x+" ");
    }
    }
    }

    в третей задаче сделал что число не превышает N по модулю, вроде это в задаче не оговорено
    import java.util.*;
    class z9_3
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String[] args)
    {
    int i,n,x,k;
    k=reader.nextInt();
    n=reader.nextInt();
    for (i=1; i<=10; i++)
    {
    x=((int)(Math.random()*(2*n+1))-n)*k;
    System.out.print(x+" ");
    }
    }
    }

    четвертая задача, вероятно, было бы проще через массивы решать, и также я не смог разобраться с использованием переменных булева типа, поэтому там есть некая странная переменная a принимающая значения 0 и 1
    import java.util.*;
    class z9_4
    {
    static Scanner reader=new Scanner(System.in);
    public static void main(String[] args)
    {
    int i,x,c1,c2,c3,max,min,s,d,a;
    double sr1,sr2;
    max=15;
    min=35;
    c1=0;
    c2=0;
    c3=0;
    s=0;
    d=0;
    a=0;
    for (i=1; i<=30; i++)
    {
    x=(int)(Math.random()*21)+15;
    System.out.print(x+" ");
    s+=x;
    if (x>max) max=x;
    if (xx)
    {
    if ((i!=1)&&(i!=2))
    if (a==1) c2++;
    a=0;
    }
    if (dsr2+5)||(sr1<sr2-5))
    System.out.println("Месяц аномальный");
    else System.out.println("Месяц не аномальный");
    }
    }

    ОтветитьУдалить
  16. Этот комментарий был удален автором.

    ОтветитьУдалить
  17. у меня четвертая задача не хочет нормально отправляться, кусок её съедается

    ОтветитьУдалить
  18. Сергей и Vincenc, что-то блог категорически не хочет принимать у вас четвертую задачу нормально.

    Вон у Сергея в нескольких if "съел" знак неравенства.

    Vincenc, насчет использования в 4-й задаче массивов -- в том виде, как сформулированы требования в задаче, нет необходимости в массивах (я это специально так сделал). А вообще-то у этой задачи действительно есть варианты, где массивы необходимы.

    ОтветитьУдалить