Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 1
Регистрация: 04.02.2017
Сообщений: 31
1

Проверка кода на наличие ошибок!

14.05.2017, 16:48. Просмотров 1701. Ответов 7
Метки нет (Все метки)

Пчелы труженицы

Не секрет, что самые трудолюбивые в мире - пчелы. Только некоторые труженицы пчелки присматривают за собранным медом. В нашем улье были установлены следующие правила.

Каждая пчела имела свою рабочую территорию, которая зависела от ее ранга.

Пчела первого ранга имела территорию 1 соту (шестиугольник), 2-го – 7 сот (одна сота и вокруг нее еще 6 сот), третьего ранга – 19 сот – одна сота + 6 сот вокруг + еще 12 сот вокруг. То есть в распоряжении пчелы K-того ранга была фигура, образованная из шестиугольников, радиусом K – шестиугольников.

Нумерация сот начинается с левой нижней соты, и происходит в направлении левой-нижней стороны по рядах (см. рисунок).



Для присмотра за каждой сотой пчелка двигается из соты под номером 1 к соте под номером N, но каждый раз другим путем, чтобы параллельно контролировать и остальные соты. Чтобы попасть из первой соты в N-тую пчелка решила двигаться одним из трех направлений: вверх, вверх-вправо и вниз-вправо. Сколькими способами пчелка с рангом K может попасть из соты с номером 1 в соту под номером N?

Входные данные

В единственной строке находится два числа K – ранг пчелы, и номер соты, в которую нужно попасть пчеле.

1 ≤ K ≤ 14

Выходные данные

Единственное число – количество способов.


Лимит времени 1 секунда

Лимит использования памяти 64 MiB
Входные данные #1
2 7
Выходные данные #1
11
Вот рабочий код
Pascal
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
var a, c:array[0..27,0..27] of int64;
    b:array[0..27,0..27] of boolean;
    count, r, n, i, j, max:longint;
    rez:int64;
procedure out;
begin
     writeln (rez);
end;
begin
     readln (r, n);
     fillchar (a, sizeof(a), 0);
     fillchar (c, sizeof(c), 0);
     fillchar (b, sizeof(b), false);
     max:=1;
     for i:=2 to r do
        max:=max+6*(i-1);
     if n>max then begin rez:=0; out; halt; end;
     count:=1;
     for i:=1 to r do
         for j:=1 to r+i-1 do
         begin
              a[i,j]:=count;
              b[i,j]:=true;
              inc (count);
         end;
     for i:=r+1 to r+r-1 do
         for j:=i-r+1 to r+r-1 do
         begin
              a[i,j]:=count;
              b[i,j]:=true;
              inc (count);
         end;
     for i:=1 to r do
     begin
          c[1,i]:=1;
          c[i,1]:=1;
     end;
     for i:=2 to 2*r-1 do
         for j:=2 to 2*r-1 do
             if b[i,j] then
                           c[i,j]:=c[i-1,j]+c[i,j-1]+c[i-1,j-1];
     for i:=1 to 2*r-1 do
        for j:=1 to 2*r-1 do
            if a[i,j]=n then rez:=c[i,j];
     out;
end.
Пытался перевести на с++ и вот че получился
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
#include <iostream>
using namespace std;
 
int main() {
    int r,n,rez=0;
cin >> r;
cin >> n;
long long int count,max = 0;
bool b[28][28] = {false};
long long int a[28][28] = { };
long long int c[28][28] = { };
 
max = 1;
for (int i=2;i<=r;i++)max=max+6*(i-1);
if (n>max){ rez=0;cout<<rez;return 0;}
count=1;
for (int i=1;i<=r;i++)
    for (int j=1;j<=r+i-1;j++){
        a[i][j]=count;
        b[i][j]=true;
        count++;
    }
for (int i=r+1; i<=r+r-1; i++)
         for (int j=i-r+1;j<=r+r-1;j++){
              a[i][j]=count;
              b[i][j]=true;
              count++;
         }
         for (int i=1;i<=r;i++){
          c[1][i]=1;
          c[i][1]=1;
        }
    for (int i=2;i<=2*r-1;i++)
         for(int j=2;j<=2*r-1;j++)
             if (b[i][j])c[i][j]=c[i-1][j]+c[i][j-1]+c[i-1][j-1];
for (int i=1; i<=2*r-1;i++)
        for (int j=1;j<=2*r-1;j++)
            if (a[i][j]==n)rez=c[i][j];
     cout<<rez;
}
Код на паскаль 100% прошел проверку а с++ 70% помогите обнаружить ошибку
1
Изображения
 
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2017, 16:48
Ответы с готовыми решениями:

Существует ли проверка на наличие ошибок на уровне написания кода
Здравствуйте. Всех с наступающим. Подскажите, начал работать с JavaScript в Visual Studio и...

Проверка диска на наличие ошибок
После того как win 7 слетела я решил установить win 8.1 диск d который я не отформатировал т.к. там...

Нужна проверка на наличие ошибок
$str1 = '&lt;a href=&quot;ссылка&quot;&gt;текст&lt;/a&gt;'; $str2 = '&lt;img src=&quot;ссылка&quot; alt=&quot;&quot; id=&quot;img&quot;&gt;'; $str1_1...

Надоедливая проверка на наличие ошибок на HDD
Здравствуйте уважаемые пользователи Кибер Форума. В процессе эксплуатации ПК у пользователя...

7
Заводной мандарин
1064 / 626 / 239
Регистрация: 05.05.2015
Сообщений: 3,521
Записей в блоге: 2
14.05.2017, 22:47 2
devcpp, прошелся по обоим кодам строчка в строчку, не нашел отличий, вроде код воспроизведен точно, молодец! А в чем тогда ошибка? Что значит
Цитата Сообщение от devcpp Посмотреть сообщение
Код на паскаль 100% прошел проверку а с++ 70%
Добавлено через 9 минут
Компилирую, запускаю, ввожу 5 и 6, получаю результат 1. А что не так? Я просто не вникал в суть программы, что должно происходить?
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
14.05.2017, 22:56 3
devcpp, индексация массивов в С++ начинается с нуля, а не 1 как в паскале.
Соответственно и for цикл по массиву из n элементов должен быть
C++
1
2
for (int i = 0; i < n; i++)
    arr[i] //...
0
Заводной мандарин
1064 / 626 / 239
Регистрация: 05.05.2015
Сообщений: 3,521
Записей в блоге: 2
14.05.2017, 23:12 4
Цитата Сообщение от MrGluck Посмотреть сообщение
а не 1 как в паскале
В паскале разве с 1? А здесь:
Цитата Сообщение от devcpp Посмотреть сообщение
a, c:array[0..27,0..27] of int64; b:array[0..27,0..27] of boolean;
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
14.05.2017, 23:19 5
Цитата Сообщение от Joey Посмотреть сообщение
В паскале разве с 1?
По умолчанию да.
Здесь всё же ТС указал диапазон, так что с этим я не прав
1
Заводной мандарин
1064 / 626 / 239
Регистрация: 05.05.2015
Сообщений: 3,521
Записей в блоге: 2
14.05.2017, 23:24 6
Цитата Сообщение от MrGluck Посмотреть сообщение
По умолчанию да.
Не знал (или забыл)
0
4454 / 2072 / 263
Регистрация: 01.03.2013
Сообщений: 5,508
Записей в блоге: 22
15.05.2017, 14:19 7
Лучший ответ Сообщение было отмечено devcpp как решение

Решение

Не могу проверить - Хром не пускает на Е-олимп, может боится Воннакрая.
UPD пускает на Е-олимп, кот ниже дает следующие результаты
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
#include <iostream>
using namespace std;
 
typedef unsigned long long int ull;
 
const int N = 30;
int a[N][N], c[N][N], n, v;
ull b[N][N];
 
ull f(int i, int j) {
    if (i<0 || i>=n || j<0 || j>=n || a[i][j]==0 || a[i][j]>v) return 0;
    if (a[i][j]==v) return 1;
    if (c[i][j]==0) {
        b[i][j] = f(i+1,j) + f(i+1,j+1) + f(i,j+1);
        c[i][j] = 1;        
    }
    return b[i][j];
}
int main() {
    int k, t=1; cin>>k>>v; n=2*k-1;
    for(int i=0; i<n; i++) {
        int l = max(0, i-k+1), r = min(n, i+k);
        for(int j=l; j<r; j++) a[i][j] = t++;
    }
    //for(int i=0; i<n; i++) {for(int j=0; j<n; j++) cout<<a[i][j]<<' '; cout<<'\n';}
    cout<<f(0,0);
}
1
Миниатюры
Проверка кода на наличие ошибок!  
dailydose
15.05.2017, 15:41     Проверка кода на наличие ошибок!
  #8

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
может боится Воннакрая.
а кто его не боится ?)
/ я аж на линух вовсе перешел :p

0
15.05.2017, 15:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2017, 15:41
Привет! Вот еще темы с ответами:

Проверка диска на наличие ошибок сломала диск
Багала программа установленная на съёмном hdd захотел её переустановить после удаления остались...

Проверка диска на наличие ошибок в домашних условиях
Всем привет ;) Ситуация - Есть комп рабочий и есть HDD (samsung SP0822N) - вроде как...

Проверка кода на наличие массива
Sub Макрос1() Dim Worksheet As Worksheet Dim textRng As String Dim ArrForTab() As Variant '...

Проверка файла на наличие в нем кода на Паскале
помогите пожалуйста написать процедуру,которая проверяет, действительно ли текст является кодом на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.