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

Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ifstream читает файл со второй строки http://www.cyberforum.ru/cpp-beginners/thread724479.html
Добрый день, читаю файл через fstream и записываю его, запись идет только со второй строки, не могу понять почему #include <iostream> #include <cctype> #include <fstream> #include <string>...
C++ Одномерные динамические массивы (осуществить ввод, проверку, вывод результатов) Очень прошу помочь с написанием этой программы.Говорят что легкая но у меня никак не выходит.Частями вроде бы получается, однако все детали, предложенные здесь, сделать не могу :( Одномерные массивы... http://www.cyberforum.ru/cpp-beginners/thread724473.html
C++ Ошибка инициализации объекта, конструктором класса
Добрый день. Написал программу. Создание класса (упражнение из книги Дейтеля) "Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих...
C++ Структуры (напечатать самое распространенное женское имя)
Приветствую! Всем хорошего настроения! Только вот у меня его совсем нет..... Сессия на носу, необходимо последнюю лабораторку допинать, а не получается:( Если кто нибудь поможет, буду очень...
C++ Прерывания http://www.cyberforum.ru/cpp-beginners/thread724426.html
Друзья, вот архив с DOC-ким файлом, помогите реализовать программу,задание под пунктом ПРИМЕР ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
C++ Удаление рядков и столбцов в матрице Есть матрица, нужно удалить те рядки и столбцы в которих есть нулевой елемент. Например из матрицы 3 2 -3 0 4 4 0 2 -1 1 2 3 -1 -3 2 получаем 3 -3 4 подробнее

Показать сообщение отдельно
System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
08.04.2015, 16:59
Ребят,ну подскажите пожалуйста по коду.В книге Дейтела дошел жо этой задачи.Начал писать код насколько понял задачу.Сначала была загвоздка при установке ходов по диагонали(не мог правильно границы массива обозначить),но потом увидел условие в инете,и понял как это сделать. Пытался сделать через рандомные координаты.Программа запускается,НО,не знаю в чем косяк ,если программа, я так понимаю с 3-5 попыток не получает результат,то она попросту виснет наверное(сколько времени не ждал,ничего не изменилось),или цикл зацикливается.Не могу понять почему. Вот код,пояснения написал,может я условие обнуления массива неправильно как-то задал?Ума не приложу где косяк,из-за чего он виснет.Пытался условие обнуления и так и этак менять,все равно зависает,если не получилось сразу . Подскажите пожалуйста начинающему . В данном примере цикл вайл стоит не равным 7ми,т.е. установка 7 ферзей делается.Если поставить для 8ми ферзей,ни разу не получалось увидеть результат.Но видел результат когда выдавал ответ для 7ми ферзей и было 1 пустое место как раз для 8го ферзя.
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <vcl.h>
#include <iomanip>
#include <cstdlib>
#include <string>
 
using namespace std;
 
int main()
{
  const int size=8;
  char array[size][size]={0};
  int x,y,c=0,z=0,t=0,e=0;
  srand(time(0));
 
 
 
  for(int i=0;i<size;i++)    // замена всех элементов массива на "-"
     for(int j=0;j<size;j++)
        array[i][j]='-';
  // координаты начальные
  x=0;
  y=0;
  // установка доступных ходов ферзя меняем на "*"
  for(int i=0;i<size;i++)
  {
     array[x][i]='*';
     array[i][y]='*';
  }
  for(int i=0;i<size;i++)
  {
   int k=0;
   k=y-i+x;
   if(k>=0&&k<size)
      array[i][k]='*';
   k=y+i-x;
   if(k>=0&&k<size)
      array[i][k]='*';
  }
  array[x][y]='f';    // меняем символ координаты на символ ферзя
 
  while(z!=7) // установка остальных ферзей
  {
  // если на последнем проходе цикл не завершился,
  // или кол-во доступных ходов равно 0
  // обнуляем массив и устанавливаем заново 1го ферзя в точку 0 0,
    if(t==6||c==0)
    {
      for(int i=0;i<size;i++)
         for(int j=0;j<size;j++)
            array[i][j]=='-';
      x=0;
      y=0;
      for(int i=0;i<size;i++)
      {
       array[x][i]='*';
       array[i][y]='*';
      }
      for(int i=0;i<size;i++)
      {
       int k=0;
       k=y-i+x;
       if(k>=0&&k<size)
          array[i][k]='*';
       k=y+i-x;
       if(k>=0&&k<size)
          array[i][k]='*';
      }
      array[x][y]='f';
      t=0;               // сбрасываем счетчик проходов заново в 0
      e++;               // количество сделанных сбросов
      }
    // выбираем рандомные координаты
    x=rand()%7+1;
    y=rand()%7+1;
     // если по кординатам у нас "*" или "-",пропускаем остальной цикл
     // и выбираем опять рандомные координаты
    if(array[x][y]=='*'||array[x][y]=='f')
       continue;
    for(int i=0;i<size;i++)
    // если координата пуста, то ставим ферзя и рисуем его ходы
    {
     array[x][i]='*';
     array[i][y]='*';
    }
    for(int i=0;i<size;i++)
    {
     int k=0;
     k=y-i+x;
     if(k>=0&&k<size)
        array[i][k]='*';
     k=y+i-x;
     if(k>=0&&k<size)
        array[i][k]='*';
    }
    array[x][y]='f';  // на месте координаты новой,ставил символ ферзя
    c=0;z=0;          // обнуляем счетчик пустых символов и количество ферзей
    for(int i=0;i<size;i++)
    {
       for(int j=0;j<size;j++)
          {
          if(array[i][j]=='-')
             c++;              // считаем кол-во пустых символов
          if(array[i][j]=='f')
             z++;             // считаем кол-во ферзей
          }
    }
    t++;                   // прибавляем к счетчику проходов единицу
 }
 
 
 
  cout << "  0" << " 1" << " 2" << " 3" << " 4" << " 5"
       << " 6" << " 7 " << endl;
  for(int i=0;i<size;i++)
  {
  cout << i << " ";
  for(int j=0;j<size;j++)
        cout << array[i][j] << " ";
  cout << endl;
  }
  cout << "\n\nPustie simvoli = "<<c<<endl;
  cout << "Kolichesto hodov - "<< t+1
       << "\nObnylali massiv = " << e << " raz(a) " << endl;
  cout <<endl;
  system("pause");
  return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru