fwf

Ввод  / вывод

#include <iostream>
#include <string>

int main() {
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << x << std::endl;
  return 0;
}

Лист. 1.

g++ -o test 01.cpp

Компиляция

./test
Hello World
Hello

Вывод 1.

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  return 0;
}

Лист. 2.

Введите четырёхзначное число: 1234
Ваше число 1234 наше число 8360

Вывод 2.

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  std::cout << "Быков: " << b << " Коров: " << c << std::endl;
  return 0;
}

Лист. 3.

Введите четырёхзначное число: 1234
Ваше число 1234 наше число 8360
Быков: 0 Коров: 0

Вывод 3.

Функция if

Ищем быков

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  if (x[0] == y[0])
        b++;
  std::cout << "Быков: " << b << " Коров: " << c << std::endl;
  return 0;
}

Лист. 4.

Введите четырёхзначное число: 1234
Ваше число 1234 наше число 8360
Быков: 0 Коров: 0

Вывод 4.

Задание 1. Перепишите программу листинг 4 так, чтобы можно было найти 4 быка.

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  if (x[0] == y[0])
    b++;
  if (x[1] == y[1])
    b++;
  if (x[2] == y[2])
    b++;
  if (x[3] == y[3])
    b++;
  std::cout << "Быков: " << b << " Коров: " << c << std::endl;
  return 0;
}

Лист. 5.

Введите четырёхзначное число: 8306
Ваше число 8306 наше число 8360
Быков: 2 Коров: 0

Вывод 5.

Ищем коров.

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  if (x[0] == y[0])
    b++;
  if (x[1] == y[1])
    b++;
  if (x[2] == y[2])
    b++;
  if (x[3] == y[3])
    b++;
  if (x[0] == y[0])			// Ищем первую корову
    c++;
  if (x[0] == y[1])
    c++;
  if (x[0] == y[2])
    c++;
  if (x[0] == y[3])
    c++;
  std::cout << "Быков: " << b << " Коров: " << c << std::endl;
  return 0;
}

Лист. 6.

Введите четырёхзначное число: 3860
Ваше число 3860 наше число 8360
Быков: 2 Коров: 1

Вывод 6.

Задание 2. Перепишите программу листинг 6 так, чтобы можно было найти 4 быка и/или 4 коровы.

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  if (x[0] == y[0])
    b++;
  if (x[1] == y[1])
    b++;
  if (x[2] == y[2])
    b++;
  if (x[3] == y[3])
    b++;
  if (x[0] == y[0])			// Ищем первую корову
    c++;
  if (x[0] == y[1])
    c++;
  if (x[0] == y[2])
    c++;
  if (x[0] == y[3])
    c++;
  if (x[1] == y[0])			// Ищем вторую корову
    c++;
  if (x[1] == y[1])
    c++;
  if (x[1] == y[2])
    c++;
  if (x[1] == y[3])
    c++;
  if (x[2] == y[0])			// Ищем третью корову
    c++;
  if (x[2] == y[1])
    c++;
  if (x[2] == y[2])
    c++;
  if (x[2] == y[3])
    c++;
  if (x[3] == y[0])			// Ищем четвёртую корову
    c++;
  if (x[3] == y[1])
    c++;
  if (x[3] == y[2])
    c++;
  if (x[3] == y[3])
    c++;
  std::cout << "Быков: " << b << " Коров: " << c << std::endl;
  return 0;
}

Лист. 7.

Введите четырёхзначное число: 8360
Ваше число 8360 наше число 8360
Быков: 4 Коров: 4

Вывод 7.

Чтобы избавиться от лишних коров перепишем строку вывода результатов в консоль

std::cout << "Быков: " << b << " Коров: " << c-b << std::endl;

Цикл for in

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  if (x[0] == y[0])
    b++;
  if (x[1] == y[1])
    b++;
  if (x[2] == y[2])
    b++;
  if (x[3] == y[3])
    b++;
  for (char i : y)			// Ищем первую корову
    if (x[0] == i)
      c++;
  for (char i : y)			// Ищем вторую корову
    if (x[1] == i)
      c++;
  for (char i : y)			// Ищем третью корову
    if (x[2] == i)
      c++;
  for (char i : y)			// Ищем четвёртую корову
    if (x[3] == i)
      c++;
  std::cout << "Быков: " << b << " Коров: " << c-b << std::endl;
  return 0;
}

Лист. 8.

Введите четырёхзначное число: 8306
Ваше число 8306 наше число 8360
Быков: 2 Коров: 2

Вывод 8.

Цикл for со счётчиком

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  for (int n = 0; n < 4; n++){
  if (x[n] == y[n])
    b++;
  }
  for (char i : y)			// Ищем первую корову
    if (x[0] == i)
      c++;
  for (char i : y)			// Ищем вторую корову
    if (x[1] == i)
      c++;
  for (char i : y)			// Ищем третью корову
    if (x[2] == i)
      c++;
  for (char i : y)			// Ищем четвёртую корову
    if (x[3] == i)
      c++;
  std::cout << "Быков: " << b << " Коров: " << c-b << std::endl;
  return 0;
}

Лист. 9.

Введите четырёхзначное число: 8306
Ваше число 8306 наше число 8360
Быков: 2 Коров: 2

Вывод 9.

Задание 3. Перепишите программу листинг 9 так, чтобы строки с поиском коров в программе сократились за счёт применения цикла for со счётчиком.

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  for (int n = 0; n < 4; n++){
  if (x[n] == y[n])
    b++;
  for (char i : y)			// Ищем коров
    if (x[n] == i)
      c++;
  }
  std::cout << "Быков: " << b << " Коров: " << c-b << std::endl;
  return 0;
}

Лист. 10.

Введите четырёхзначное число: 8306
Ваше число 8306 наше число 8360
Быков: 2 Коров: 2

Вывод 10.

Оператор else

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		// Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  std::cin >> x;			// Введите число
  std::cout << "Ваше число " << x << " наше число " << y << std::endl;
  int b = 0, c = 0;
  for (int n = 0; n < 4; n++){
  if (x[n] == y[n])                     // Ищем быков
    b++;
  else                                  // Если не нашли быка,
    for (char i : y)			// ищем коров
      if (x[n] == i)
        c++;
  }
  std::cout << "Быков: " << b << " Коров: " << c << std::endl;
  return 0;
}

Лист. 11.

Введите четырёхзначное число: 8306
Ваше число 8306 наше число 8360
Быков: 2 Коров: 2

Вывод 11.

Цикл while и выход из цикла

#include <iostream>
#include <string>

int main() {
  std::string y = "8360";		  // Загадано число
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  while (true){
    std::cin >> x;			  // Введите число
    std::cout << "Ваше число " << x << " наше число " << y << std::endl;
    int b = 0, c = 0;
    for (int n = 0; n < 4; n++){
    if (x[n] == y[n])                     // Ищем быков
      b++;
    else                                  // Если не нашли быка,
      for (char i : y)			  // ищем коров
        if (x[n] == i)
          c++;
    }
    std::cout << "Быков: " << b << " Коров: " << c << std::endl;
    if (b == 4){
      std::cout << "Вы победили" << std::endl;
      return 0;
    }
  }
}

Лист. 12.

Введите четырёхзначное число: 1234
Ваше число 1234 наше число 8360
Быков: 0 Коров: 1
8360
Ваше число 8360 наше число 8360
Быков: 4 Коров: 0
Вы победили

Вывод 12.

Напишем генератор случайного числа по правилам игры "Быки и коровы".

#include <iostream>
#include <string>

int main() {
  std::string y = "";		            // Загаданное число
  srand(time(0));    // генератор случайного числа из разных цифр, первая не 0
  std::string s = "1234567890";
  for (int i = 9; i > 6; i = s.length()){
    int k = rand() % (i);
    y += s[k];
    s.erase(k, 1);
  }
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  while (true){
    std::cin >> x;			  // Введите число
    //std::cout << "Ваше число " << x << " наше число " << y << std::endl;
    int b = 0, c = 0;
    for (int n = 0; n < 4; n++){
    if (x[n] == y[n])                     // Ищем быков
      b++;
    else                                  // Если не нашли быка,
      for (char i : y)			  // ищем коров
        if (x[n] == i)
          c++;
    }
    std::cout << "Быков: " << b << " Коров: " << c << std::endl;
    if (b == 4){
      std::cout << "Вы победили" << std::endl;
      return 0;
    }
  }
}

Лист. 14.

Введите четырёхзначное число: 1234
Быков: 0 Коров: 1
5678
Быков: 0 Коров: 1
9056
Быков: 1 Коров: 1
9102
Быков: 1 Коров: 2
9270
Быков: 2 Коров: 1
9820
Быков: 4 Коров: 0
Вы победили

Вывод 14.

Создадим функцию для перемешивания строки

#include <iostream>
#include <string>

// Функция shuffle случайным образом перемешивает строку.

std::string shuffle(std::string s){
  srand(time(0));
  for (int i = s.length(); i > 0; i--){
    int k = rand() % (i);
    s += s[k];
    s.erase(k, 1);
  }
  return s;
}

int main() {
  std::string y = shuffle("1234567890");                 // Перемешиваем строку
  y = (y[0] == '0') ? y.substr(1, 4) : y.substr(0, 4);   // Выбираем 4 цифры так, чтобы первая из них была не 0
  std::cout << "Введите четырёхзначное число: ";
  std::string x;
  while (true){
    std::cin >> x;			  // Введите число
    //std::cout << "Ваше число " << x << " наше число " << y << std::endl;
    int b = 0, c = 0;
    for (int n = 0; n < 4; n++){
    if (x[n] == y[n])                     // Ищем быков
      b++;
    else                                  // Если не нашли быка,
      for (char i : y)			  // ищем коров
        if (x[n] == i)
          c++;
    }
    std::cout << "Быков: " << b << " Коров: " << c << std::endl;
    if (b == 4){
      std::cout << "Вы победили" << std::endl;
      return 0;
    }
  }
}

Лист. 15.

Введите четырёхзначное число: 1234
Быков: 0 Коров: 3
5678
Быков: 0 Коров: 1
2345
Быков: 1 Коров: 2
3426
Быков: 1 Коров: 1
2415
Быков: 2 Коров: 2
2451
Быков: 4 Коров: 0
Вы победили

Вывод 15.