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

Три ученика и три языка. Определить кто на каком программирует. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Сергей2000
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 28
16.10.2013, 14:33     Три ученика и три языка. Определить кто на каком программирует. #1
Решите задачи на C++(в виде кода программы)

3.Три ученика (Коля, Петя и Сережа) умеют писать программы на трех языках программирования (Basic, Pascal и C). Кто, на каких языках умеет писать программы неизвестно, но известно, что каждый ученик умеет писать программы на двух языках. При этом на Basic умеет программировать один ученик, на Pascal — трое и на C — двое. Кто умеет программировать на Basic, если известно, что Сережа научил Петю программировать на С?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 14:33     Три ученика и три языка. Определить кто на каком программирует.
Посмотрите здесь:

как найти три максимальных и три минимальных значения 10 случайных чиселых C++
C++ Даны три списка потребителей и три массива объёмов электроэнергии
Известно, что число делится на три тогда и только тогда, когда сумма его цифр делится на три. Проверим этот признак для заданного трехзначного числа X C++
Заданы матрицы А, В, С, D, каждая из которых содержит по три строчки и по три столбца. Перемножить матрицы Р и Q C++
Даны три слова. Определить палиндромы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
16.10.2013, 17:00     Три ученика и три языка. Определить кто на каком программирует. #2
С - Сережа и Петя (известно по условию)
Паскаль - Коля, Петя и Сережа (известно по условию)
Бэйсик - Коля
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
16.10.2013, 17:17     Три ученика и три языка. Определить кто на каком программирует. #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
_, ну надо же
Цитата Сообщение от Сергей2000 Посмотреть сообщение
на C++
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <clocale>
 
int main()
{
    setlocale(LC_ALL, "");
    std::cout << "С - Сережа и Петя (известно по условию)\n"
                 "Паскаль - Коля, Петя и Сережа (известно по условию)\n"
                 "Бэйсик - Коля\n";
}
govorov
24 / 24 / 3
Регистрация: 25.09.2013
Сообщений: 76
16.10.2013, 17:39     Три ученика и три языка. Определить кто на каком программирует. #4
Может что-то похитрее надо, чем просто вывод на экран?
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
16.10.2013, 17:57     Три ученика и три языка. Определить кто на каком программирует. #5
Цитата Сообщение от govorov Посмотреть сообщение
Может что-то похитрее надо, чем просто вывод на экран?
дело в том что только автору решать как именно выполнять определение, "_" просто выполнил расчет перед написанием программы, чтобы облегчить работу компилятора
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
16.10.2013, 17:57     Три ученика и три языка. Определить кто на каком программирует. #6
Ытъ. Виноват, плохо читаю.
Может автор хотел программу, анализирующую строки и самой решающую загадку? (ИИ?)
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
16.10.2013, 18:08     Три ученика и три языка. Определить кто на каком программирует. #7
Коля, конечно. Не столь замудреная задача.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
16.10.2013, 19:07     Три ученика и три языка. Определить кто на каком программирует. #8
Цитата Сообщение от govorov Посмотреть сообщение
Может что-то похитрее надо, чем просто вывод на экран?
вы правы, чего то не хватает:
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
47
48
49
50
51
52
#include <iostream>
#include <clocale>
 
class Nothing
{
  public:
    Nothing() { setlocale(LC_ALL, ""); }
    virtual void print() const = 0;
    void doNothing() const {}
    virtual ~Nothing() {}
};
 
void Nothing::print() const
{
    std::cout << "It's nothing to do" << std::endl;
}
 
class Something : private Nothing
{
  public:
    void print() const
    {
        doNothing();
        std::cout << "С - Сережа и Петя (известно по условию)\n"
                 "Паскаль - Коля, Петя и Сережа (известно по условию)\n"
                 "Бэйсик - Коля\n";
    }
};
 
class Just4Fun : public Something
{
  public:
    Just4Fun() : smth(new Something)
    {
        pfS memf_ptr = &Just4Fun::print;
        (smth->*memf_ptr)();
    }
    ~Just4Fun()
    {
        delete smth;
    }
 
  private:
    typedef void (Something::*pfS)() const;
    Something* smth;
};
 
 
int main()
{
    Just4Fun makeItReal;
}
так пойдет?
Catstail
Модератор
 Аватар для Catstail
21440 / 10225 / 1666
Регистрация: 12.02.2012
Сообщений: 17,105
16.10.2013, 19:11     Три ученика и три языка. Определить кто на каком программирует. #9
Это комбинаторная задача. Решать ее надо так:

1) сгенерировать все возможности
2) отобрать те, которые не противоречат заданным условиям (возможно, кстати, что решение не единственно!)
Catstail
Модератор
 Аватар для Catstail
21440 / 10225 / 1666
Регистрация: 12.02.2012
Сообщений: 17,105
16.10.2013, 19:43     Три ученика и три языка. Определить кто на каком программирует. #10
Так и есть! Решений-то возможно три (если я не напутал).

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream.h>
 
int Conf[3][3];
int V[9];
 
void printLang(int p)
{
    if (Conf[p][0]) 
        cout << "Pascal ";
    else
        cout << "       ";
 
    if (Conf[p][1]) 
        cout << "Basic  ";
    else
        cout << "       ";
 
    if (Conf[p][2]) 
        cout << "C      ";
    else
        cout << "       ";
 
}
 
 
void nextConfig()
{
    int k=0,i,j;
    while(1)
    {
        V[k]++;
        if (V[k] > 1)
            V[k++]=0;
        else
            break;
    }
    for (i=0; i<3; i++)
        for (j=0; j<3; j++)
            Conf[i][j]=V[i*3+j];
    
}
 
void checkConfig()
{
    int i,j,s;
 
    // сумма элементов 2-го столбца (бэйсик)
    // должна быть = 1
 
    s=0;
    for (i=0; i<3; i++) s+=Conf[i][1];
    if (s != 1) return;
 
    // в каждой строке матрицы сумма элементов 
    // должна быть = 2
 
    for (i=0; i<3; i++)
    {
        s=0;
        for (j=0; j<3; j++) s+=Conf[i][j];
        if (s != 2) return;
    }
 
    // Сережа и Петя знают C
 
    if ((Conf[1][2] != 1) || (Conf[2][2] != 1)) return;
 
    // Конфигурация подходит. Печатаем:
 
    cout << "Nick  "; printLang(0); cout << endl;
    cout << "Pete  "; printLang(1); cout << endl;
    cout << "Serge "; printLang(2); cout << endl;
 
    cout << endl;
    
}
 
 
int main(int argc, char* argv[])
{
    int i;
    for (i=0; i<8; i++) V[i]=0;
 
    for (i=0; i<=511; i++)
    {
        nextConfig();
        checkConfig();
    }
 
    return 0;
}
Миниатюры
Три ученика и три языка. Определить кто на каком программирует.  
Catstail
Модератор
 Аватар для Catstail
21440 / 10225 / 1666
Регистрация: 12.02.2012
Сообщений: 17,105
16.10.2013, 19:48     Три ученика и три языка. Определить кто на каком программирует. #11
Поправочка: решений даже не три, а четыре!
user7
1 / 1 / 0
Регистрация: 16.07.2013
Сообщений: 24
16.10.2013, 20:07     Три ученика и три языка. Определить кто на каком программирует. #12
Цитата Сообщение от Catstail Посмотреть сообщение
Поправочка: решений даже не три, а четыре!
решение только одно

Сережа
Петя

Сережа
Петя
Коля

Коля

Бейсик - 1ч. Коля
С - 2ч. Сережа и Петя
Паскаль - 3ч. все
Catstail
Модератор
 Аватар для Catstail
21440 / 10225 / 1666
Регистрация: 12.02.2012
Сообщений: 17,105
16.10.2013, 20:18     Три ученика и три языка. Определить кто на каком программирует. #13
Цитата Сообщение от Сергей2000 Посмотреть сообщение
на Pascal — трое и на C — двое.
- ай!!! Я не учел условие "Pascal — трое и на C — двое". Сейчас подправлю...

Добавлено через 3 минуты
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream.h>
 
int Conf[3][3];
int V[9];
 
void printLang(int p)
{
    if (Conf[p][0]) 
        cout << "Pascal ";
    else
        cout << "       ";
 
    if (Conf[p][1]) 
        cout << "Basic  ";
    else
        cout << "       ";
 
    if (Conf[p][2]) 
        cout << "C      ";
    else
        cout << "       ";
 
}
 
 
void nextConfig()
{
    int k=0,i,j;
    while(1)
    {
        V[k]++;
        if (V[k] > 1)
            V[k++]=0;
        else
            break;
    }
    for (i=0; i<3; i++)
        for (j=0; j<3; j++)
            Conf[i][j]=V[i*3+j];
    
}
 
void checkConfig()
{
    int i,j,s;
 
    // сумма элементов 1-го столбца (паскаль)
    // должна быть = 3
 
    s=0;
    for (i=0; i<3; i++) s+=Conf[i][0];
    if (s != 3) return;
 
    // сумма элементов 2-го столбца (бэйсик)
    // должна быть = 1
 
    s=0;
    for (i=0; i<3; i++) s+=Conf[i][1];
    if (s != 1) return;
 
    // сумма элементов 3-го столбца (C)
    // должна быть = 2
 
    s=0;
    for (i=0; i<3; i++) s+=Conf[i][2];
    if (s != 2) return;
 
 
    // в каждой строке матрицы сумма элементов 
    // должна быть = 2
 
    for (i=0; i<3; i++)
    {
        s=0;
        for (j=0; j<3; j++) s+=Conf[i][j];
        if (s != 2) return;
    }
 
    // Сережа и Петя знают C
 
    if ((Conf[1][2] != 1) || (Conf[2][2] != 1)) return;
 
    // Конфигурация подходит. Печатаем:
 
    cout << "Nick  "; printLang(0); cout << endl;
    cout << "Pete  "; printLang(1); cout << endl;
    cout << "Serge "; printLang(2); cout << endl;
 
    cout << endl;
    
}
 
 
int main(int argc, char* argv[])
{
    int i;
    for (i=0; i<8; i++) V[i]=0;
 
    for (i=0; i<=511; i++)
    {
        nextConfig();
        checkConfig();
    }
 
    return 0;
}
Вывод:

Код
Nick   Pascal  Basic
Pete   Pascal          C
Serge Pascal          C
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
16.10.2013, 20:33     Три ученика и три языка. Определить кто на каком программирует. #14
Цитата Сообщение от Сергей2000 Посмотреть сообщение
Три ученика (Коля, Петя и Сережа) умеют писать программы на трех языках программирования (Basic, Pascal и C). Кто, на каких языках умеет писать программы неизвестно, но известно, что каждый ученик умеет писать программы на двух языках. При этом на Basic умеет программировать один ученик, на Pascal — трое и на C — двое. Кто умеет программировать на Basic, если известно, что Сережа научил Петю программировать на С?
а причем здесь С?
это нормальная житейская логика, она же комбинаторика,все двуязычные, но на Паскале все трое пишут
Сережа научил Петю писать на С, значит Сережа и Петя пишут на Си плюс они пишут на Паскале
Цитата Сообщение от Сергей2000 Посмотреть сообщение
Pascal — трое
они же и пишут на Си
Цитата Сообщение от Сергей2000 Посмотреть сообщение
на C — двое.
остается один двуязычный который пишет на Паскале но не пишет на Си
Цитата Сообщение от Сергей2000 Посмотреть сообщение
(Коля
так что Catstail, ты не прав
одно решение
мне даже лень писать прогу(кстати на каком языке)
ну примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum(Paskal=1,Basic=2,C=4);
petya=Paskal | C;
serioha=Paskal | C;
kola=Paskal;
if(petya&Paskal & petya&C)
 printf("petya no basic");
 else
 printf("petya yes basic");
if(serioha&Paskal & serioha&C)
 printf("serioha no basic");
 else
 printf("serioha yes basic");
if(kola&Paskal & kola&C)
 printf("kola no basic");
else
 printf("kola yes basic");
могу конечно ошибаться, но по моему здесь перечисления(enum) плюс битовые поля само то
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
16.10.2013, 20:49     Три ученика и три языка. Определить кто на каком программирует. #15
Господа, вы все наркоманы. Искренне вас благодарю, что разукрасили мой вечер.
ValeryS
16.10.2013, 20:56
  #16

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Господа, вы все наркоманы.
никогда
я просто алкоголик

Catstail
Модератор
 Аватар для Catstail
21440 / 10225 / 1666
Регистрация: 12.02.2012
Сообщений: 17,105
17.10.2013, 10:20     Три ученика и три языка. Определить кто на каком программирует. #17
Цитата Сообщение от ValeryS Посмотреть сообщение
ак что Catstail, ты не прав
- см. выше.

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
мне даже лень писать прогу
- а код что-то непонятен... Перебор должен присутствовать в том или ином виде. Разве нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 12:49     Три ученика и три языка. Определить кто на каком программирует.
Еще ссылки по теме:

Создать строку: с начало три символа первой строки, потом эти же три символа в обратном порядке C++
Даны три стороны одного и три стороны другого треугольника. Я, чайник нужно в С++ C++
Дано слово. Переставить первые три и последние три буквы C++

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

Или воспользуйтесь поиском по форуму:
govorov
24 / 24 / 3
Регистрация: 25.09.2013
Сообщений: 76
17.10.2013, 12:49     Три ученика и три языка. Определить кто на каком программирует. #18
Цитата Сообщение от Catstail Посмотреть сообщение
Это комбинаторная задача. Решать ее надо так:

1) сгенерировать все возможности
2) отобрать те, которые не противоречат заданным условиям (возможно, кстати, что решение не единственно!)
Примерно это я и имел ввиду)
Yandex
Объявления
17.10.2013, 12:49     Три ученика и три языка. Определить кто на каком программирует.
Ответ Создать тему
Опции темы

Текущее время: 14:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru