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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Сергей2000
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 32
#1

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

16.10.2013, 14:33. Просмотров 1232. Ответов 17
Метки нет (Все метки)

Решите задачи на C++(в виде кода программы)

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

Найти три максимальных и три минимальных значения 10 случайных чисел - C++
помогите написать программку.

Даны три списка потребителей и три массива объёмов электроэнергии - C++
Даны три списка потребителей и три массива объёмов электроэнергии. Напечатать из каждого списка потребителей с минимальным(min) и...

Дано слово. Переставить первые три и последние три буквы - C++
Привет всем. Помогите пожалуйста кто может решить две задачи по C++. Сам пробовал решить_но безуспешно. 1.Дано слово. Переставить...

В интервале от 1 до 100, вывести все числа, кроме делящихся на три или имеющих в записи цифру три - C++
вывести цикл от 1 до 100, так чтобы числа имеющие 3 или которые можно разделить на 3 не выводились. пробовал через массивы, но нужно по...

Создать строку: с начало три символа первой строки, потом эти же три символа в обратном порядке - C++
Помогите пожалуйста! Ввести строку символов. Создать новую строку следующим образом: с начало три символа первой строки, потом эти же три...

Заданы матрицы А, В, С, D, каждая из которых содержит по три строчки и по три столбца. Перемножить матрицы Р и Q - C++
Заданы матрицы А, В, С, D, каждая из которых содержит по три строчки и по три столбца. Перемножить матрицы Р и Q, полученные в результате...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
16.10.2013, 17:00 #2
С - Сережа и Петя (известно по условию)
Паскаль - Коля, Петя и Сережа (известно по условию)
Бэйсик - Коля
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,926
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";
}
3
govorov
24 / 24 / 3
Регистрация: 25.09.2013
Сообщений: 76
16.10.2013, 17:39 #4
Может что-то похитрее надо, чем просто вывод на экран?
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
16.10.2013, 17:57 #5
Цитата Сообщение от govorov Посмотреть сообщение
Может что-то похитрее надо, чем просто вывод на экран?
дело в том что только автору решать как именно выполнять определение, "_" просто выполнил расчет перед написанием программы, чтобы облегчить работу компилятора
0
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
16.10.2013, 17:57 #6
Ытъ. Виноват, плохо читаю.
Может автор хотел программу, анализирующую строки и самой решающую загадку? (ИИ?)
0
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
16.10.2013, 18:08 #7
Коля, конечно. Не столь замудреная задача.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,926
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;
}
так пойдет?
2
Catstail
Модератор
22613 / 10974 / 1778
Регистрация: 12.02.2012
Сообщений: 18,105
16.10.2013, 19:11 #9
Это комбинаторная задача. Решать ее надо так:

1) сгенерировать все возможности
2) отобрать те, которые не противоречат заданным условиям (возможно, кстати, что решение не единственно!)
1
Catstail
Модератор
22613 / 10974 / 1778
Регистрация: 12.02.2012
Сообщений: 18,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;
}
0
Миниатюры
Три ученика и три языка. Определить кто на каком программирует.  
Catstail
Модератор
22613 / 10974 / 1778
Регистрация: 12.02.2012
Сообщений: 18,105
16.10.2013, 19:48 #11
Поправочка: решений даже не три, а четыре!
0
user7
1 / 1 / 0
Регистрация: 16.07.2013
Сообщений: 24
16.10.2013, 20:07 #12
Цитата Сообщение от Catstail Посмотреть сообщение
Поправочка: решений даже не три, а четыре!
решение только одно

Сережа
Петя

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

Коля

Бейсик - 1ч. Коля
С - 2ч. Сережа и Петя
Паскаль - 3ч. все
1
Catstail
Модератор
22613 / 10974 / 1778
Регистрация: 12.02.2012
Сообщений: 18,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
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,844
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) плюс битовые поля само то
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
16.10.2013, 20:49 #15
Господа, вы все наркоманы. Искренне вас благодарю, что разукрасили мой вечер.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 20:49
Привет! Вот еще темы с ответами:

Даны три стороны одного и три стороны другого треугольника. Я, чайник нужно в С++ - C++
Даны три стороны одного и три стороны другого треугольника. Эти треугольники равновеликие, т.е. имеют равные площади

Известно, что число делится на три тогда и только тогда, когда сумма его цифр делится на три. Проверим этот признак для заданного трехзначного числа X - C++
Известно, что число делится на три тогда и только тогда, когда сумма его цифр делится на три. Проверим этот признак для заданного...

Даны три слова. Определить палиндромы - C++
Буду очень благодарен если поможете переделать задачку :) Вот код похожей задачи только с числами... #include &lt;iostream&gt; #include...

Определить, имеется ли в строке три цифры подряд - C++
Определить, имеется ли в строке три цифры подряд.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.10.2013, 20:49
Ответ Создать тему
Опции темы

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