Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Шахматы - C++

16.02.2010, 01:34. Просмотров 2827. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шахматы (C++):

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

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

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

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

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

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

13
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
16.02.2010, 02:17 #2
все ch такие, что ch < n, n є N
к примеру n = 100000, ch = 12345 - строго возрастающее или ch = 54321 - убывающее
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 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 / 0
Регистрация: 13.09.2009
Сообщений: 96
01.03.2010, 22:11  [ТС] #4
это на C++ ? что-то не очень понимаю как это можно записать на С...
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
01.03.2010, 22:31 #5
inferno mf, в данном коде нету специфических контейнеров из C++, поэтому можете просто заменить ввод/вывод и все
0
Day
1158 / 963 / 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 биты - управление знаками
0
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 биты - управление знаками
Спасибо. Можете подсказать по тому коду, редактировал, но есть ошибки...
0
odip
Эксперт С++
7159 / 3221 / 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" );
2
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;
}
под С этот код не работает((

есть непонятные конструкции(
0
Vorona
Peace 2 all shining faces
669 / 531 / 45
Регистрация: 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
1158 / 963 / 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" );
0
odip
Эксперт С++
7159 / 3221 / 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.
1
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
10.03.2010, 17:32 #13
Цитата Сообщение от odip Посмотреть сообщение
Код не наглядный получается и не очевидный.
А вообще сначала я думал так написать:


Добавлено через 1 минуту
Два последних случая нехороши тем, что при больших dx и dy величина dx*dy может превысить int.
Здорово!
А по поводу превышения int, так она еще раньше может превыситься в вычитаниях, и если есть такое подозрение, надо сразу переходить на длинную арифметику, но и это в общем случае не спасает, т.к. компутер (и даже объединенные все компы мира) - устройство хоть и чрезвычайно мощное и емкое, но увы! конечное, чего никак нельзя сказать об этой простейшей математической абстракции - натуральном ряде
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
Привет! Вот еще темы с ответами:

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

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

Классы (шахматы) - C++
5. Шахматы. Создайте класс kletka. У него должно быть два поля: vert: (a, b, c, d, e, f, g, h) и hor: 1..8. Реализуйте методы: 0)...

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


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

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

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