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

Задание №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+" ");
}
}
}
Сергей, в твоем решении надо сделать одно изменение: в генераторе случайных чисел надо написать (max-min+1) -- то есть добавить единицу к разности наибольшего и наименьшего.
ОтветитьУдалитьЭто связано с особенность работы Math.random(): генерируются десятичные дроби от 0 до 1, НО! Включая 0, однано НЕ ВКЛЮЧАЯ 1 -- то есть надо добавлять 1, чтобы сгенерировалась и верхняя граница диапазона.
К сожалению не смог вспомнить все, что вы объясняли про генератор случайных чисел поэтому такая ошибка.
ОтветитьУдалитьСобственно вот остальные задания, сразу не выложил так как блог странно работал и коментарии сразу пропадали =(
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+" ");
}
}
}
Задание №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;
}
}
}
}
Сергей, с учетом того, о чем мы говорили по поводу генератора случайных чисел: надо переделать строчку n1=(int)(Math.random()*2*n-n);
ОтветитьУдалитьПредудыщий комментарий относился в решению задачи №2.
ОтветитьУдалитьА теперь по поводу задачи №3 -- у меня несколько замечаний.
Верно ли я понимаю, что цикл while ты использовал, что называется, "не от хорошей жизни"? Потому что не было понятно, получится ли у тебя нужное частное?
Я думаю, что проблема в использовании 1000 в генераторе случайного числа: почему именно 1000? Почему, например, не 3000 или не 10000?
Строго говоря, из-за этого решение не соответствует требованию, сформулированному в условии.
Задача имеет решение с циклом for, и генератор надо написать иначе.
И не забудь про 1!)))
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+" ") ;
}
}
}
Третья задача оказалась с "зубами"...
ОтветитьУдалитьAnnie, в твоем варианте есть прблема с генерацией случайного числа.
Например: если k=5, n=8, то самое большое число должно быть (по смыслу условия) 40 (делится на 5 с частным 8).
А из строчки x=(int)((k*n+k)*Math.random())+1; получается, что х может иметь значение 45...
Кстати, у всех проблема с этой строчкой.
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+" ") ;
}
}
}
}
Но ведь если разделить 41 на 5, частное тоже будет равно 8
ОтветитьУдалитьAnnie, вторая задача в порядке.
ОтветитьУдалитьА в третьей может получиться 45 -- и из-за этого единственного числа проблемы(((
А так?
ОтветитьУдалить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+" ") ;
}
}
}
Так максимальное возможное число будет 44 -- и условие будет выполняться, да.
ОтветитьУдалитьКстати, if в таком варианте не нужен, хотя и не мешает, разумеется: все равно все генерируемые числа и так годятся.
Да, точно
ОтветитьУдалитьСпасибо :)
Номер три вариант в котором результат работы программы только числа при деление которых на к частное меньше 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("месяц не аномальный");
}
}
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("Месяц не аномальный");
}
}
Этот комментарий был удален автором.
ОтветитьУдалитьу меня четвертая задача не хочет нормально отправляться, кусок её съедается
ОтветитьУдалитьСергей и Vincenc, что-то блог категорически не хочет принимать у вас четвертую задачу нормально.
ОтветитьУдалитьВон у Сергея в нескольких if "съел" знак неравенства.
Vincenc, насчет использования в 4-й задаче массивов -- в том виде, как сформулированы требования в задаче, нет необходимости в массивах (я это специально так сделал). А вообще-то у этой задачи действительно есть варианты, где массивы необходимы.