Эти задачи – пока в основном для группы из
Салавата, они до них добрались в прошлом году на Pascal'е, поэтому могут делать их теперь и на Java.
Разумеется, их могут делать все, кто знаком с работой цикла while)))
Примечание: во всех заданиях следует написать
блок, который будет "заставлять" пользователя ввести требуемое по
условию значение.
Задание №1
Одна из самых знаменитых задач: найти
наибольший общий множитель для двух положительный целых чисел известным методом
– вычитать из большего числа в паре меньшее число в паре, до тех пор, пока оба
числа не станут равны друг другу.
Например, для пары (24, 32) этот метод дает
следующие промежуточные результаты: (24,8)-(16,8)-(8,8), а для пары (121, 88) –
(33,88)-(33,55)-(33,22)-(11,22)-(11,11).
Обратите внимание, что для пары 15, 22
наибольшим общим делителем является 1.
Напиши класс, который принимает с клавиатуры
два целых положительных числа и находит описанным методом их наибольший общий
делитель.
Задание №2
Напишите класс, который принимает с клавиатуры
два целых положительных числа и находит их наименьший общий делитель, больший 1
– если он вообще существует.
Класс должен выводить на экран либо найденное
значение, либо соответствующее результату текстовое сообщение.
Задание №3
Напиши класс, который принимает с клавиатуры
целое положительное число (обязательно – не оканчивающееся на 0!) и строит из
него целое число – с обратным порядком цифр.
Класс должен проверить, являются ли введенное число
и построенное из него число – равными (то есть – является ли введенное число
симметричным, палиндромом).
Класс должен выводить на экран (как конечный
результат) оба числа – вместе с соответствующим результату проверки текстовым
сообщением.
Задание №4
Напишите класс, который принимает с клавиатуры
целое положительное число и находит простое число, меньшее введенного с
клавиатуры числа, и наиболее близкое к введенному с клавиатуры числу.
Задание №5, особое)))
Помните задачу про "найти цифру с
известным порядковым номером в серии целых чисел"?
А что, если попробовать решить ее с
использованием цикла while – точнее, с использованием вложенных циклов while?
Этот комментарий был удален автором.
ОтветитьУдалитьimport java.util.*;
ОтветитьУдалитьclass n1
{
static Scanner reader=new Scanner(System.in);
public static void main(String[] args)
{
int a,b;
a=0;b=0;
while((a<=0)||(b<=0))
{System.out.print("Введите числа");
a=reader.nextInt();
b=reader.nextInt();}
while(a!=b)
if(a>b) a-=b; else b-=a;
System.out.print(a);
}
}
import java.util.*;
ОтветитьУдалитьclass n2
{
static Scanner reader=new Scanner(System.in);
public static void main(String[] args)
{
int a,b,c,i,n;
a=0;b=0;n=0;
while((a<=0)||(b<=0))
{System.out.print("Введите числа");
a=reader.nextInt();
b=reader.nextInt();}
if(a>b) c=b; else c=a;
for(i=c;i>1;i--)
if((a%i==0)&&(b%i==0)) n=i;
if(n!=0) System.out.print(n); else System.out.print("наименьший общий делитель определить нельзя");
}
}
import java.util.*;
ОтветитьУдалитьclass n3
{
static Scanner reader=new Scanner(System.in);
public static void main(String[] args)
{
long a,i,c,i1,a1,d,b1,i2,m;
a=0;i=0;d=1;i1=0;a1=0;
while((a<=0)||(a%10==0))
{System.out.print("Введите числo");
a=reader.nextInt();}
c=a;m=a;
while(c>0)
{c/=10;i1++;}
for(i2=1;i2<=i1;i2++)
d=d*10;
for(i=1;i<=i1;i++)
{
b1=a%10;
a1=a1+b1*d;
d=d/10;
a=a/10;
}
a1/=10;
System.out.println("Начальное число:"+m);
System.out.println("Конечное число:"+a1);
if(m==a1) System.out.println("Числа палиндромы"); else System.out.println("Числа непалиндромы");
}
}
import java.util.*;
ОтветитьУдалитьclass n4
{
static Scanner reader=new Scanner(System.in);
public static void main(String[] args)
{
int a,d,i,i1;
d=1;a=0;i1=0;
while(a<=0)
{System.out.print("Введите числа");
a=reader.nextInt();}
while(d!=0)
{ a--;i1=0; for(i=2;i<a;i++)
{ if(a%i==0) i1++;} if(i1==0) d=0;}
System.out.print(a);
}
}
import java.util.*;
ОтветитьУдалитьclass Za1
{static Scanner reader = new Scanner (System.in);
public static void main (String [] args)
{ int x,y;
x=reader.nextInt ();
y=reader.nextInt();
while (x<=0 || y<=0)
{ System.out.println ("Неверный ввод");
x=reader.nextInt ();
y=reader.nextInt(); }
while(x!=y)
{ if (x>y) x=x-y;
if (y>x) y=y-x; }
System.out.print (x);}}
Спасибо, Аня, нравится твое решение.
ОтветитьУдалитьСережа, я сегодня посмотрю и отпишусь, ладно?
Сережа, с первой задачей вопросов нет, " в яблочко".
ОтветитьУдалитьА вот во второй у меня вопрос: можно ли вместо for там использовать while? То есть это не вопрос, а просьба попробовать сделать вариант --- и это работает, конечно, а все же интересно сравнить)))
Сережа, теперь аналогичная просьба про задачу №3: написать вариант без for.
ОтветитьУдалитьПравильно я тебя понял, что while ты используешь, чтобы посчитать количество повторов в for, который идет потом?
А попробуй все загнать в один while!
Сережа, задачу №4 мы сегодня разберем на занятии: там есть пара интересных возможностей -- она написана правильно, и именно поэтому интересно ее "покрутить")))
ОтветитьУдалитьimport java.util.*;
ОтветитьУдалитьclass n5{
static Scanner reader=new Scanner(System.in);
public static void main(String[] args){
long a,n,i,c,i1,d,i2,m,i3,i4,b1,a1;
n=reader.nextInt();
a=-1;c=1;i=0;i1=0;d=1;i3=0;i4=0;a1=0;
while(i0)
{c/=10;i3++;}
for(i2=1;i2<=i3;i2++)
d=d*10;
for(i=1;i<=i3;i++)
{
b1=a%10;
a1=a1+b1*d;
d=d/10;
a=a/10;
}
a1=a1/10;
for(i2=1;i2<i1;i2++)
{a1=a1/10;}
a1=a1%10;
System.out.print(a1);
}}
Сережа, это (задачу №5) я должен погонять на разных данных и обдумать))))
ОтветитьУдалитьimport java.util.*;
ОтветитьУдалитьclass z14_5
{
static Scanner reader=new Scanner(System.in);
public static void main(String[] args)
{
int a,b=0,c=1,n=2,cd,d,e;
a=reader.nextInt();
if (a==1) System.out.println(0);
else
{
while (a>n)
{
cd=c+1;
b=0;
while (cd>0)
{
b++;
cd=cd/10;
}
c++;
n+=b;
}
d=n-a;
e=(c/(int)(Math.pow(10,d)))%10;
System.out.println(e);
}
}
}