Домино. Неверно выводятся данные.
Добавлено: 20 окт 2015, 20:37
Домино. Имеется произвольная комбинация костей домино, составляющая легальную текущую игровую позицию. Определить, является ли данная комбинация "тупиковой", то есть такой, в которой очередной ход невозможен. Необходимо предусмотреть проверку корректности заданной комбинации.
Код: Выделить всё
#include "math.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <iomanip>
int main()
{
int k, i;
FILE *ptrfile;
k = 0;
int s;
ptrfile = fopen("D:\\input.txt", "r+"); //так мне было короче )
while ((fscanf(ptrfile, "%d", &s) != EOF))
{
if (!ptrfile) break; //чтобы не делал лишнего
k += 1;
}
int *c = (int*)malloc(k*sizeof(int)); //должен быть динамическим
rewind(ptrfile); //перематываем файл для повторного чтения
for (i = 0; i < k; i++)
{
fscanf(ptrfile, "%d", &c[i]);//размер массива
printf("c[%d]=%d ", i, c[i]); //элементы массива
if (i == 1) {
int m = 1;
int *p = (int*)malloc(m*sizeof(int));
for (m = 0; m < c[0] + 2; m = m + 2) {
p[m] = c[1] / pow(10, (c[0] - m));// формула разложения сплошного числа на пары
if (m > 1) {
p[m] = p[m] % 100;
std::cout << p[m] << " ";//разложенные числа массива на пары 1-й массив p[m]
}
int y = 1;
int *pt = (int*)malloc(y*sizeof(int));
for (y = 0; y < c[0] + 2; y = y + 2) {
pt[y] = c[1] / pow(10, (c[0] - y));
if (y > 1) {
pt[y] = pt[y] % 100;
std::cout << pt[y] << " ";//разложенные числа массива на пары 2-й массив P[y]
}
//проверка на повтор фишек
int e = 1;
for (m = 0; m < c[0]; m++) {
for (y = 0; y < c[0] ; y++) {
if ((((p[m] / 10) == (p[y] / 10))) && (((p[m] / 10) == (p[y] % 10)))&& (m != y)) { std::cout << "#1";e = e + 1; }
if ((((p[m]) / 10) == ((p[y]) % 10)) && (((p[m]) % 10) == ((p[y]) / 10)) && (m != y)) {std::cout << "#2"; e = e + 1; }
if (e != 1) { std::cout << "stop, repeat!" << " "; getchar();return 0;}
}
}
//составление "змкейки"
{int k=1;
for (m=0;m<c[0];m++){ int z = 0;
while(k!=c[0]){
if ( ( (p[m]%10)==(p[m+k]%10) && (m!=m+k) ) || ( (p[m]/10)==(p[m+k]/10) && (m!=m+k) ) || ( (p[m]%10)==(p[m+k]/10) && (m!=m+k) ) || ( (p[m]/10)==(p[m+k]%10) && (m!=m+k) ) ) {z++;}
k++;
} if (z == c[0]) { std::cout << "Combination is normal."; }k = z;
}if (k!=c[0]){std::cout<<"Deadlock combination !";}
}
}}
}
}
fclose(ptrfile);
free(c); //убираем мусор, когда уже не нужен (но не раньше =))
getchar(); //задержка консоли
return 0;
}