Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 15:09   #1
Cool-T
Новичок
Джуниор
 
Регистрация: 07.03.2011
Сообщений: 1
По умолчанию Проверка пятнашек на сходимость

Здравствуйте, написал программу, проверяющую пятнашечную комбинацию на возможность решения.

Использовал проверку четности суммы из статьи.

PHP код:
#include <iostream>

int main ()
{
    
using namespace std;
    
cout << "Vvedite poo4eredi kajdiy r9d sleva na pravo\n (pustaya kletka = 0)\n";
    const 
int size 4;
    
int p[size][size];
    for (
int i 0i<sizei++)
    {
        for (
int j 0j<sizej++)
        {
            
cin >> p[i][j];
        }
    }
    
int nol=0;
    
int sum 0;
    for (
int i 0i<sizei++)
    {
        for (
int j 0j<sizej++)
        {
            if (!
p[i][j]) nol=i+1;
            else 
            for (
int k ik<sizek++)
            {
                for (
int l jl<sizel++)
                {
                    if (
p[i][j] > p[k][l] && p[k][l]!=0)
                        
sum++;
                }
            }
        }
    }

    if ((
sum+nol)%2cout << "NET!!\n";
    else 
cout << "DA!!\n";
    
system("pause");
    return 
0;

Когда cделал, проверил тремя вариантами
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0

1 2 3 4
5 6 7 8
9 10 11 0
13 14 15 12

1 2 3 4
5 6 7 8
9 10 11 12
13 15 14 0

Получал правильные данные (да да нет)
Думал, что все работает верно.
Потом ввел
0 2 3 4
1 6 7 8
5 10 11 12
9 13 14 15
Получил ответ, мол несходимая комбинация. Хотя очевидно, что она сходится.

Никак не могу понять где ошибка. Помогите пожалуйста.

У меня складывается впечатление, что ошибка в понятии "пусть квадратик с числом i расположен до (если считать слева направо и сверху вниз) k квадратиков с числами меньшими i." из статьи, так как я проверяю только квадраты следующие после как по строкам так и по столбцам, не проверяя предыдущие ряды в следующих строках.
Да, скорей всего проблема была именно в этом.
PHP код:
for (int i 0i<16;i++){
        if (!
z[i]) nol=i/4+1;
        else
        for (
int j=i;j<16;j++)
        {
            if (
z[i] > z[j] && z[j])
                        
sum++;
        }
    } 
Работает корректно во всех случаях

Тему можно закрывать\удалять. Спасибо :D

Еще вопрос, стоит ли с точки зрения эффективности отказаться от nol (номер ряда с нулём)
заменив в коде
nol=i/4+1 на sum+=(i/4+1)*106; (105 максимальная возможная сумма)
и
if ((sum+nol)%2) на if ((sum%106+sum/106)%2) ?

Последний раз редактировалось Cool-T; 15.01.2012 в 10:12.
Cool-T вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
эвристика для пятнашек Маргарита 123 Помощь студентам 0 07.12.2011 21:01
Проверка AleX_zZ Помощь студентам 3 06.06.2011 09:38
excel.Проверка VBA и проверка функции Будда Помощь студентам 0 14.04.2011 21:10
Сходимость ряда Dekker Помощь студентам 3 15.11.2009 12:17