Быки и коровы - C (СИ)
Формулировка задачи:
Помогите связать и доделать..пока без графики.
первая часть:
в этой части, программа загадывает число, мы( пользователь) его угадываем, только мы должны угадывать число которое загадала программа, пока не угадаем. а тут если 1 раз не правильно ввели то нас выкидывает.если зациклить циклом do.... while тогда если мы с первого раза не угадали, тогда программа новое число загадывает.. а нужно его за определенное количество попыток угадать.
2 кусок кода.что бы сравнивать сколько быков и коров, я решила массив перевести в строку и из строки поэлементно сравнивать, вот что получилось.
3 кусок, проверяем позиции.
Помогите пожалуйста довести до ума, сзязать это в одно, и вообще до конца закончить.. что бы выводилось сколько быков, сколько коров. по идее куски правильно составлены. только я их не могла проверить, так как ошибки компилятор выдает из за неправленого поставления алгоритма.
пишу на Borland C++.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main ()
{
clrscr();randomize();
int r, m[4], a[4], x, c, i=0;
do {
r=random(10);
for (int j=0; j<i; j++)
if (r==m[j]) r=-1;
if (r==-1) continue;
m[i++]=r;
printf("%d", m[i-1]);
}while (i < 4);
printf("\n");
scanf ("%i",&x);
c = 1;
for (i=0; i<4; i++){
a[3-i]=x % 10;
x/=10;
}
for (i=0; i<4; i++)
if (!(m[i]==a[i])){
c=0;
break;
}
if (!c){
printf("\nerror\n");
}
getch();
return 0;
}int a[4], m[4];
char s[5], s2[5];
for ( int i=0; i<5; i++) { s[i] =char a[i] }for (i=0 ; i<5 ; i++){ if (s[i]=s2[i]) { n++; printf ( "%c", s [i])}Решение задачи: «Быки и коровы»
textual
Листинг программы
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
int main (){clrscr(); randomize();
int k, m[4], a[4], x, c, i=0, *bull, *cow;
char M[5], A[5];
// машина генерирует четырехзначное не повторяющее число
do {
k=random(10) ;
for (int j=0; j<i; j++)
if (k==m[j]) k=-1;
if (k==-1) continue ;
m [i++] = k;
printf ("%d", m[i-1]);
} while (i < 4);
printf ("\n");
for ( i = 0; i < 4; i++) {
scanf ("%d", a+1);
M[i] = m[i] +'0';}
//мы вводим
scanf ("%i", & x);
c=1;
for (i = 0; i < 4; i++){
a [3-i] = x % 10;
x /=10;
}
for ( i = 0; i < 4; i++) {
scanf ("%d", a+i);
A[i] = a[i] +'0';}
// ранее перевели массивы в строки. теперь сравниваем строки
for (i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if ( M[i] == A[i] ) {
if ( i == j) bull++;
else cow++;
}
// выводим
printf ("\n%c\n%c\nresult: %d %d\n", M, A, *bull, *cow);
getch ();
return 0;
}
Объяснение кода листинга программы
Вот что делает код:
- Генерирует четырехзначное уникальное число:
- Переменная
kинициализируется случайным четырехзначным числом от 1000 до 9999 с помощью функцииrandom(). - Число проверяется на уникальность, и если оно уже было использовано, генерируется новое число.
- Число выводится на экран.
- Переменная
- Переводит числовое значение в строку и сравнивает его со введенным числом:
- Четырехзначное число, введенное пользователем, преобразуется в массив целых чисел.
- Каждое число в массиве преобразуется в строку с помощью символа ASCII.
- Сравниваются пары строк, и если они совпадают, увеличивается счетчик
bull(бык). Если строки не совпадают, увеличивается счетчикcow(корова).
- Выводит результат:
- На экран выводятся исходная и преобразованная строки.
- Выводится количество совпадений (быков) и количество различий (коров).