С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
inferno mf
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
1

Шахматы: угрожает ли конь, стоящий на поле (k,l) шахматной доски, полю (m,n)?

16.02.2010, 01:34. Просмотров 3089. Ответов 13
Метки нет (Все метки)

Помогите пожалуйста разобраться с задачкой..

Даны натуральные числа k,l,m,n. Необходимо выяснить, угрожает ли конь, стоящий на поле (k,l) шахматной доски, полю (m,n) ?

Добавлено через 43 минуты
с этой разобрался...

можете такую пояснить?

Найти все натуральные числа, не превосходящие заданного n, десятичная запись которых есть строго возрастающая или строго убывающая последовательность цифр.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2010, 01:34
Ответы с готовыми решениями:

Угрожает ли конь, стоящий на поле (k, l), полю (m, n)
Поле шахматной доски определяется парой натуральных чисел, первое из которых...

Шахматная доска. Выяснить, угрожает ли конь, стоящий на поле (k, l), полю(m, n)
Поле шахматной доски определяется парой натуральных чисел,первое из которых...

Шахматная доска: угрожает ли ферзь, стоящий на поле (k, l), полю (m, n)?
Собственно,условие вот. Поле шахматной доски определяется парой натуральных...

Проверить не угрожает ли данный шахматный конь заданному полю
Поле шахматной доски имеет размер 8 x 8. Клетки обозначены координатами, первая...

Выяснить, угрожает ли ферзь полю (k, l), если он расположен на поле (m, n)
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не...

13
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
16.02.2010, 02:17 2
все ch такие, что ch < n, n є N
к примеру n = 100000, ch = 12345 - строго возрастающее или ch = 54321 - убывающее
0
Nameless One
Эксперт С++
5788 / 3437 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
16.02.2010, 03:11 3
Цитата Сообщение от inferno mf Посмотреть сообщение
можете такую пояснить?
Найти все натуральные числа, не превосходящие заданного n, десятичная запись которых есть строго возрастающая или строго убывающая последовательность цифр.
Сам недавно решал такую задачу. Строго возрастающая - все цифры в числе должны образовывать неубывающую последовательность (например, 1245). Вот собственно код:
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
41
42
43
#include <iostream>
using namespace std;
 
bool seq(int n)
{
    if(n<10)
        return true;
    unsigned long val=n%10;
    n=n/10;
    while(n)
    {
        unsigned long temp=n%10;
        if(temp>=val)
            return false;
        val=temp;
        n=n/10;
    }
    return true;
}
        
int main()
{
    setlocale(LC_ALL, "Russian");
 
    unsigned long n;
 
    do
    {
        cout << "Введите натуральное число N" << endl;
        cin >> n;
    }
    while(n<1);
    cout << endl;
    do
    {
        if(seq(n))
            cout << n << endl;
    }
    while(--n);
 
    system("pause");
    return 0;
}
Для строго убывающей последовательности поменяй условие в строке 13.

Добавлено через 42 минуты
То же самое, с использованием строк:
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
41
42
43
44
45
46
#include <iostream>
using namespace std;
 
int slen(const char* str)
{
    int n=0;
    while(*str++)
        n++;
    return n;
}
 
bool seq(char s[11])
{
    if(slen(s)==1)
        return true;
    while(*++s)
        if((int)*(s-1)>=(int)*s)
            return false;
    return true;
}
        
int main()
{
    setlocale(LC_ALL, "Russian");
 
    unsigned long n;
    char str[11];
 
    do
    {
        cout << "Введите натуральное число N" << endl;
        cin >> n;
    }
    while(n<1);
    cout << endl;
    do
    {
        itoa(n, str, 10); 
        if(seq(str))
            cout << str << endl;
    }
    while(--n);
 
    system("pause");
    return 0;
}
0
inferno mf
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
01.03.2010, 22:11  [ТС] 4
это на C++ ? что-то не очень понимаю как это можно записать на С...
0
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
01.03.2010, 22:31 5
inferno mf, в данном коде нету специфических контейнеров из C++, поэтому можете просто заменить ввод/вывод и все
0
Day
1161 / 966 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
02.03.2010, 15:05 6
inferno mf, нашел довольно изящное решение задачи про коня, не удержался от соблазна его показать
C
1
2
3
4
5
6
7
8
9
10
11
12
 for(s=0; s<8; s++) {
    if (s&1) x = 1;
    else     x = 2;
    y = 3 - x;
    if (s&2) x = -x;
    if (s&4) y = -y;
    if (k+x==mm && l+y==n) {
        printf("Am!\n");
        break;
    }
}
if (s==8) printf("Fig\n");
s - битовая шкала
1 бит - шаг по x (1 or 2)
2-3 биты - управление знаками
0
inferno mf
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
02.03.2010, 17:30  [ТС] 7
Цитата Сообщение от Day Посмотреть сообщение
inferno mf, нашел довольно изящное решение задачи про коня, не удержался от соблазна его показать
Код
 for(s=0; s<8; s++) {
    if (s&1) x = 1;
    else     x = 2;
    y = 3 - x;
    if (s&2) x = -x;
    if (s&4) y = -y;
    if (k+x==mm && l+y==n) {
        printf("Am!\n");
        break;
    }
}
if (s==8) printf("Fig\n");
s - битовая шкала
1 бит - шаг по x (1 or 2)
2-3 биты - управление знаками
Спасибо. Можете подсказать по тому коду, редактировал, но есть ошибки...
0
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
02.03.2010, 20:58 8
нашел довольно изящное решение задачи про коня
Это изящное решение ?

Изящное - это вот такое:
int dx= abs(k-m), dy= abs(l-n);
printf( "%s\n", ((dx==1 && dy==2) || (dx==2 && dy==1)) ? "YES" : "NO" );
2
inferno mf
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
05.03.2010, 00:35  [ТС] 9
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
41
42
43
#include <iostream>
using namespace std;
 
bool seq(int n)
{
        if(n<10)
                return true;
        unsigned long val=n%10;
        n=n/10;
        while(n)
        {
                unsigned long temp=n%10;
                if(temp>=val)
                        return false;
                val=temp;
                n=n/10;
        }
        return true;
}
                
int main()
{
        setlocale(LC_ALL, "Russian");
 
        unsigned long n;
 
        do
        {
                cout << "Введите натуральное число N" << endl;
                cin >> n;
        }
        while(n<1);
        cout << endl;
        do
        {
                if(seq(n))
                        cout << n << endl;
        }
        while(--n);
 
        system("pause");
        return 0;
}
под С этот код не работает((

есть непонятные конструкции(
0
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
05.03.2010, 01:20 10
#include <stdio.h>
убери using namespace
замени cin>>; на scanf(); и cout<<; на printf();
endl это \n
и для system вроде stdlib.h подключить нужно
0
Day
1161 / 966 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
10.03.2010, 10:48 11
А можно еще так:
Код
int dx= abs(k-m), dy= abs(l-n);
printf( "%s\n", ((dx + dy)==3 && (dx*dy)!=0) ? "YES" : "NO" );
0
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
10.03.2010, 12:37 12
Код не наглядный получается и не очевидный.
А вообще сначала я думал так написать:
int dx= abs(k-m), dy= abs(l-n);
printf( "%s\n", (dx*dy==2) ? "YES" : "NO" );
Добавлено через 1 минуту
Два последних случая нехороши тем, что при больших dx и dy величина dx*dy может превысить int.
1
Day
1161 / 966 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
10.03.2010, 17:32 13
Цитата Сообщение от odip Посмотреть сообщение
Код не наглядный получается и не очевидный.
А вообще сначала я думал так написать:


Добавлено через 1 минуту
Два последних случая нехороши тем, что при больших dx и dy величина dx*dy может превысить int.
Здорово!
А по поводу превышения int, так она еще раньше может превыситься в вычитаниях, и если есть такое подозрение, надо сразу переходить на длинную арифметику, но и это в общем случае не спасает, т.к. компутер (и даже объединенные все компы мира) - устройство хоть и чрезвычайно мощное и емкое, но увы! конечное, чего никак нельзя сказать об этой простейшей математической абстракции - натуральном ряде
0
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
10.03.2010, 18:25 14
так она еще раньше может превыситься в вычитаниях
Неправда.
dx=100000, dy=100000
Вычесть еще можем, а вот перемножить уже не можем.
0
10.03.2010, 18:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2010, 18:25

Задачка. Поле шахматной доски
Поле шахматной доски задается парой натуральных чисел: Первое указывает номер...

Поле шахматной доски определяется парой натуральных чисел
Поле шахматной доски определяется парой натуральных чисел, первое из которых...

Шахматы, конь
Всем доброго времени суток! Буду честен - в универе задали задачу на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru