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

Деление на 0 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
01.03.2010, 19:04     Деление на 0 #1
задача:
Условие

Имеется N человек и матрица А размера N´N. Элемент A[i,j] матрицы равен 1, если человек i знаком с человеком j (если i-ый человек знает j-ого, то считаем, что и j-ый человек знает i-ого) и элемент A[i,j] матрицы равен 0, если i-ый человек не знаком с человеком j. Можно ли разбить людей на 2 группы, чтобы в каждой группе были только незнакомые люди.


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

Входные данные находятся в файле input.in.
· Первая срока содержит количество людей N.
· Затем идут N строк файла, которые задают матрицу знакомств A (каждой строке матрицы соответствует отдельная строка входного файла, числа в строках разделены пробелами).


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

Выходные данные находятся в файле output.out.
Если можно разбить людей на две группы, чтобы в каждой группе были только незнакомые люди, то первая строка файла содержит сообщение “YES”, а вторая строка содержит номера людей, которые попали в одну из групп. Числа в строке разделяются одним пробелом и упорядочены по возрастанию.
Если нет, то единственная строка файла содержит сообщение “NO”.

Пример входных данных

4
0 1 0 1
1 0 1 1
0 1 0 1
1 1 1 0

Пример выходных данных

“NO”

результат теста : Ошибка Времени Выполнения(Деление на 0.)

я в упор не вижу в своем коде деление на 0;

подскажите где может быть такая засада

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
#include <stdio.h>
#include <stdlib.h>
 
int compare(const void *a,const void *b)
{
return (*(_int16 *)a)-(*(_int16*)b);
}
 
 
int main()
{
FILE* fin,*fout;
fin=fopen("input.in", "r" );
fout=fopen("output.out", "w");
int n;
fscanf(fin,"%d",&n);
 
int dn=n+n+2;
fgetc(fin);
 
if(n==1){fputs("\"NO\"",fout); return 1;}
if(n==0){fputs("\"NO\"",fout); return 1;}
 
char **a=new char* [n];
 
for (int i=0;i<n;++i){
    a[i]=new char[dn+1];
    fgets(a[i],dn-1,fin);
    
    a[i][dn]=i+48;// or 49;
}
 
    int j=1;
    int delta=0,epsilon=n;
    for(int i=0;i<epsilon;++i)
    {
        int di=i+i;
 
        while(j<epsilon)
        {
                if(a[j][di]<a[j-1][di])
                    {
                        char *temp=a[j-1];
                        a[j-1]=a[j];
                        a[j]=temp;
                        if(j>1)
                        j-=2;
                                            }
                j++;
        }
 
 
        for (int ept=0;ept<epsilon;ept++)
        {if(a[ept][di]=='0')++delta;}
        epsilon=delta;
        delta=0;
        j=1;
    }
 
bool group=true;
 
for(int j=epsilon+epsilon;j<dn-2;j+=2)
    for(int i=epsilon;i<n;i++)
        if(a[i][j]!='0')group=false;
 
if(!group){fputs("\"NO\"\n",fout); return 0;}
 
 
char *c=new char[epsilon+epsilon+1];
for(int i=0;i<epsilon;i++)
{c[i+i]=a[i][dn];
c[i+i+1]=' ';
}
c[epsilon+epsilon]=0;
qsort(c,epsilon,2,compare);
fputs("\"YES\"\n",fout);
fputs(c,fout);
return 2;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2010, 19:04     Деление на 0
Посмотрите здесь:

Деление C++
C++ Деление
деление на 0 C++
Деление на 41 C++
деление на 0 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,422
01.03.2010, 20:04     Деление на 0 #2
Забавно, а у меня код отработал правильно (под этим я понимаю что нету ошибок и Пример входных данных дает Пример выходных данных). VS 2008
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
01.03.2010, 20:23  [ТС]     Деление на 0 #3
да у меня тоже код работает правильно, и я не могу найти такой тест на котором он может ссыпатся, а система которая тестирует код пишет деление на 0
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
01.03.2010, 21:21     Деление на 0 #4
Скорее всего, проблема в устаревшем компиляторе. Вероятно, это Turbo C какой-нибудь древний. Там в стандартных библиотеках была одна фиговина для определения скорости процессора, а современные процессоры будут всё-таки побыстрее 8086-х... Пользуйся Visual Studio или свободными IDE вроде Code::Blocks, DevC++ или что там в соответствующей теме посоветуют.
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
01.03.2010, 21:40  [ТС]     Деление на 0 #5
нет, компилятор MSVS2005

Добавлено через 36 секунд
код отлаживался на MSVS2008
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
02.03.2010, 11:05     Деление на 0 #6
Цитата Сообщение от breate Посмотреть сообщение
for(int i=0;i<epsilon;++i)
{
int di=i+i;
while(j<epsilon)
{
if(a[j][di]<a[j-1][di])
Не кажется ли вам, что сдесь вылет за пределы массива?)
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
02.03.2010, 17:53  [ТС]     Деление на 0 #7
Цитата Сообщение от kazak Посмотреть сообщение
Не кажется ли вам, что сдесь вылет за пределы массива?)
нет, не кажется, точно не вылезет так как память на строку выделяется с помощью (dn+1) а dn=n+n+2;
на самом деле у меня неправильна математика, до меня допёрло, что если подставить следующий тест
Код
0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0
то ответ будет не верен так как матрица программой будет приведена к
Код
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
как можно заметить ответ YES а на самом деле NO

Добавлено через 1 минуту
хотя нет пример не удачный

Добавлено через 3 минуты
просто в низу должно быть типо
Код
..
0 0 0 0 1
0 0 0 1 0
archinko
13 / 13 / 2
Регистрация: 02.03.2010
Сообщений: 29
02.03.2010, 23:57     Деление на 0 #8
На досуге попытался решить задачку. Вышло вроде покороче, хз как с правильностю роботы. Пример решает верно и эту матрицу тоже :
0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0


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
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
 
    FILE *instream;
    instream=fopen("in.txt","r");
    FILE *outstream;
    outstream=fopen("out.txt","w");
    int N,**a;
 
    fscanf(instream,"%d",&N);
 
    a=(int **)calloc(N,sizeof(int*));
    for( int i=0;i<N;i++) a[i]=(int *)calloc(N,sizeof(int));
 
    for(i=0;i<N;i++)
    {
        for(int k=0;k<N;k++) fscanf(instream,"%d",&a[i][k]);
    }
 
    for(i=0;i<N;i++)
    {
        for(int k=0;k<N;k++)
        if(a[i][k]==1) 
        {
            for(int t=0;t<N;t++)
            {
                if(t==i) continue;
                if(a[k][t]==1&&a[i][t]==1) 
                {
                    fprintf(outstream,"NO\n");
                return 1;
                }
            }
        }
    }
    fprintf(outstream,"YES\n");
    
    return 1;
    
}
Как видно из алгоритма, я пытаюсь найти сразу не логичность, то есть, если 1 знаком с 2, значит они в разных группах и если 1 знаком с 3, и 2 тоже знаком с 3 - значит разделить на две группы незнакомых их нельзя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2010, 03:41     Деление на 0
Еще ссылки по теме:

C++ Деление
Деление на 6 C++
C++ Деление в С++

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

Или воспользуйтесь поиском по форуму:
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
03.03.2010, 03:41  [ТС]     Деление на 0 #9
конечно спасиб за идею,я пока продвину свою теорию, потом помучаю вашу(я сам как маньяк эти задачи решаю с удовольствием), тесты выполняются на матрицах 5*5 и 10*10; нужно уложится максимум в 1 секунду и вывести людей находящихся в одной группе.
Yandex
Объявления
03.03.2010, 03:41     Деление на 0
Ответ Создать тему
Опции темы

Текущее время: 03:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru