Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
#1

Шахматы - C++

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

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

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

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

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

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

Шахматы - C++
не могу понять задачи .. помогите Класс "фигура": координаты на шахматной доске, цвет. Метод - "ход" на одну позицию в одном из 4...

Шахматы - C++
По умолчанию Ферзь, ладья и конь Ферзь, ладья и конь На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. Требуется...

шахматы - C++
Разработать класс для моделирования шахматной фигуры, позволяю- щий хранить вместе с экземпляром объекта его координаты на доске, цвет...

Шахматы в с++ - C++
Даны фигуры: Пешка, слон, король.(цвет фигуры не зависит). Суть задачи состоит в том, что человек вводит координаты фигур, а программа...

Шахматы - C++
Помогите пожалуйста решить прогу, так как я абсолютно не шарю, что здесь делать. Вот в чём она заключается: На шахматной доске стоит белый...

Шахматы в консоли - C++
Хочу написать шахматы в консоли, но не знаю какой тип нужен для символов шахматных фигур, и вообще поддерживает ли их консоль? К примеру,...

Шахматы, конь - C++
Всем доброго времени суток! Буду честен - в универе задали задачу на макс.балл(все предыдущие сделал, но с этой возникла проблемка)....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
16.02.2010, 02:17     Шахматы #2
все ch такие, что ch < n, n є N
к примеру n = 100000, ch = 12345 - строго возрастающее или ch = 54321 - убывающее
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
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;
}
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
01.03.2010, 22:11  [ТС]     Шахматы #4
это на C++ ? что-то не очень понимаю как это можно записать на С...
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
01.03.2010, 22:31     Шахматы #5
inferno mf, в данном коде нету специфических контейнеров из C++, поэтому можете просто заменить ввод/вывод и все
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
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 биты - управление знаками
inferno mf
1 / 1 / 0
Регистрация: 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 биты - управление знаками
Спасибо. Можете подсказать по тому коду, редактировал, но есть ошибки...
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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" );
inferno mf
1 / 1 / 0
Регистрация: 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;
}
под С этот код не работает((

есть непонятные конструкции(
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
05.03.2010, 01:20     Шахматы #10
#include <stdio.h>
убери using namespace
замени cin>>; на scanf(); и cout<<; на printf();
endl это \n
и для system вроде stdlib.h подключить нужно
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
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" );
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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.
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
10.03.2010, 17:32     Шахматы #13
Цитата Сообщение от odip Посмотреть сообщение
Код не наглядный получается и не очевидный.
А вообще сначала я думал так написать:


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

Шахматы. Ферзь - C++
Поле шахматной доски определяется парой натуральных чисел, первое из которых задает номер вертикали, а второе — номер горизонтали. Даны...

игра шахматы - C++
Пришлите кто нибудь исходник игры Шахматы на С++!!! пожалуйста очень надо))))))))))) Добавлено через 19 секунд очень надо))

Написать консольные шахматы - C++
Происходит шахматная партия. Шахматная доска имеет размер 8x8. При этом координаты фигуры задаются в шахматной нотации, то есть состоят...

Создать класс Шахматы - C++
Создать класс Шахматы, состоящее из набора фигур и шахматной доски – двумерный массив 8 на 8. Должна быть возможность удаления фигур с...

Оцените программу: Шахматы - C++
Я почти не учил раньше программирование, чуть в школе, чуть в универе (все знания сводились о знании о переменных и цыклах). А месяцев 9...


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

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
10.03.2010, 18:25     Шахматы #14
так она еще раньше может превыситься в вычитаниях
Неправда.
dx=100000, dy=100000
Вычесть еще можем, а вот перемножить уже не можем.
Yandex
Объявления
10.03.2010, 18:25     Шахматы
Ответ Создать тему
Опции темы

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