SETI
64 / 49 / 18
Регистрация: 09.04.2018
Сообщений: 210
1

Задачка про кенгуру

27.07.2018, 14:22. Показов 1545. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нашел задачку на https://www.hackerrank.com/cha... oo/problem.
Не могу организовать цикл. Нужен цикл который прервётся когда одно значение станет больше второго или равным ему. Но мой код почему-то не работает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Kangaroo
{
    class Program
    {
        static void Main()
        {
            int x1=0, v1=0, x2=0, v2=0;
            string[] s = Console.ReadLine().Split(' ');
            x1 = Convert.ToInt32(s[0]);
            v1 = Convert.ToInt32(s[1]);
            x2 = Convert.ToInt32(s[2]);
            v2 = Convert.ToInt32(s[3]);
            string result = Cangaroo(x1, v1, x2, v2);
            Console.WriteLine(result);
            
            Console.ReadKey();
        }
        static string Cangaroo(int x1,int v1,int x2, int v2) 
        {
            if (v2 < v1)
            {
                for (int t = 0; true; t++)
                {
                    x1 += v1;
                    x2 += v2;
                    if (x1 == x2 && x1 > x2) break;
                }
                if (x1 == x2) return "YES";
                else return "NO";
            }
            else return "NO";
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2018, 14:22
Ответы с готовыми решениями:

Задачка про кирпичики
У нас есть форма. В ней надо создать 6*5 кирпичей (прямоугольников). Высота кирпича - 2. Ширина -...

Задачка про домино
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Задачка про 2 прямоугольника
Помогите написать код. using System; namespace Rectangles { public static class...

Задачка про ряд Тейлора
Только недавно начал учиться программировать на C# Взялся писать прогу на вычисление суммы в ряде...

5
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
27.07.2018, 15:23 2
Лучший ответ Сообщение было отмечено orestsyn как решение

Решение

(x1 == x2 && x1 > x2)
вы указали И
не может быть одновременно больше и равен
&& и
|| или


так к слову
C#
1
else return "NO"
else тут лишний так как если не выполнится if (x1 == x2) то в даже без else выполнится return "NO"
в обоих случаях и можно вместо

C#
1
2
 if (x1 == x2) return "YES";
                else return "NO";
сделать так
C#
1
return (x1 == x2)?"YES":"NO";
string возвращать тоже излишне лучше вернуть bool так как у вас всего 2 варианты

по поводу
C#
1
2
3
4
5
6
7
for (int t = 0; true; t++)
{
                    x1 += v1;//это будет выполнено как минимум 1 раз
                    x2 += v2;//и это а если x1 == x2 || x1 > x2 изначально верно?
                    // может стоит if (x1 == x2 && x1 > x2) break; поставить в начале цикла?
                    if (x1 == x2 && x1 > x2) break;
}
C#
1
for (int t = 0; true; t++)
сразу не заметил зачем так ?
не проще ли
C#
1
while(true)
первый раз вижу чтоб так фор использовали

Добавлено через 4 минуты
да и вообще можно использовать >= и получится (x1 >= x2)
https://professorweb.ru/my/csh... 3/3_10.php
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
27.07.2018, 16:24 3
Цитата Сообщение от Wolflind Посмотреть сообщение
первый раз вижу чтоб так фор использовали
C#
1
2
3
4
            for (;;)
            {
               ...
            }
0
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
27.07.2018, 17:15 4
КОП, так да нормально но не for (int t = 0; true; t++) учитывая что t не используется
0
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45
27.07.2018, 22:11 5
Цитата Сообщение от Wolflind Посмотреть сообщение
КОП, так да нормально но не for (int t = 0; true; t++) учитывая что t не используется
Господи Исуси не мучайте for, замени его на while.

вот это загадочный цикл, я думаю вы не понимает то что делает написанное, поэтому прокоментирую
C#
1
2
3
4
5
6
                for (int t = 0; true; t++)   //изнасилование цикла for
                {
                    x1 += v1;   //х1 = х1+v1
                    x2 += v2;   //x2 = x2+v2
                    if (x1 == x2 && x1 > x2) break;   //если х1=х2 и х1>x2 далее break;(и кстати х1 не может быть одновременно равным х2 и при этом одновременно быть его больше)
                }
быть может так будет лучше!? если я правильно понял логику вашего кода =)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool target true;
while(target)//условие цикла
{
//тело цикла
                    x1 += v1;   //х1 = х1+v1
                    x2 += v2;   //x2 = x2+v2
                    if (x1 == x2)
                    {
                        return "YES";
                        target = false;
                    }
                    if (x1 > x2)
                    {
                        return "NO";
                        target = false;
                    }
}

Хотя в функциях которые возвращают одно из двух лучше вернуть bool а не string...
0
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
01.08.2018, 21:13 6
CEDOROK,
Цитата Сообщение от CEDOROK Посмотреть сообщение
return "NO";
target = false;
вы хоть понимаете что написали?
ни в 1 на во 2 случаи
C#
1
target = false;
не выполнится до него даже не дойдет да и переменная вообще нужно
достаточно сделать
C#
1
while(true)
Добавлено через 1 минуту
я об этом уже писал выше
Цитата Сообщение от Wolflind Посмотреть сообщение
не проще ли
0
01.08.2018, 21:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2018, 21:13
Помогаю со студенческими работами здесь

Задачка про цех
На склад из цеха в течении 3-х смен поступают готовые изделия из 8-ми наименований, а затем...

Задачка про каналы
В районе города не работает компьютерная сеть. Известно количество узлов сети. Протестировав...

задачка про рыбаков
на корме и на носу лодки длиной 6 м сидят два рыбака, масса которых 60 кг и 100 кг. Рыбаки решили...

Задачка про матрицы
Нужно задать произвольную квадратную матрицу (нужно для н-го порядка) 0 0 0 ... 0 0 0 0 ... 0...

Задачка про руны
Руны — это древние магические знаки, которые наши предки использовали как буквы. Говорят, что...

Задачка про биты
есть два числа по четыре байта 0000 0000 0000 0000 0000 0000 1001 0000 - первое число 0000...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru