воскресенье, 30 октября 2011 г.

Задачи на цикл while


Эти задачи – пока в основном для группы из Салавата, они до них добрались в прошлом году на 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?

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

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. 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);
    }
    }

    ОтветитьУдалить
  3. 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("наименьший общий делитель определить нельзя");
    }
    }

    ОтветитьУдалить
  4. 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("Числа непалиндромы");
    }
    }

    ОтветитьУдалить
  5. 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);
    }
    }

    ОтветитьУдалить
  6. 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);}}

    ОтветитьУдалить
  7. Спасибо, Аня, нравится твое решение.
    Сережа, я сегодня посмотрю и отпишусь, ладно?

    ОтветитьУдалить
  8. Сережа, с первой задачей вопросов нет, " в яблочко".
    А вот во второй у меня вопрос: можно ли вместо for там использовать while? То есть это не вопрос, а просьба попробовать сделать вариант --- и это работает, конечно, а все же интересно сравнить)))

    ОтветитьУдалить
  9. Сережа, теперь аналогичная просьба про задачу №3: написать вариант без for.
    Правильно я тебя понял, что while ты используешь, чтобы посчитать количество повторов в for, который идет потом?
    А попробуй все загнать в один while!

    ОтветитьУдалить
  10. Сережа, задачу №4 мы сегодня разберем на занятии: там есть пара интересных возможностей -- она написана правильно, и именно поэтому интересно ее "покрутить")))

    ОтветитьУдалить
  11. 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);
    }}

    ОтветитьУдалить
  12. Сережа, это (задачу №5) я должен погонять на разных данных и обдумать))))

    ОтветитьУдалить
  13. 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);
    }
    }
    }

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