Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87

Не понимаю в чем ошибка. Неправильно считает количество повторений

27.01.2014, 15:55. Показов 2049. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код. Программа должна считывать 4 числа, и выводить кол-во повторений.
Она выводит, но неправильно, когда 2 повторения выводит 6.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4];
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j) {
            if (a[i]==a[j]) {++memo;}
        }
        }
    }
    std::cout<<memo;
    getche();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2014, 15:55
Ответы с готовыми решениями:

Почему неправильно считает количество повторений каждого элемента матрицы?
Почему неправильно считает количество повторений каждого элемента матрицы? Помогите разобраться. #include &quot;stdafx.h&quot; ...

Неправильно считает. где ошибка?
Была задача: найти сумму минимальных значений строк квадратной матрицы (см. вложение) Считает неправильно. помогите исправить код: ...

в чем ошибка ? не считает y[n]
#include &lt;iostream&gt; using namespace std; int main() { const int n = 3; double sum = 0; double A, L, U, R; double...

19
 Аватар для Ikol
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
27.01.2014, 16:01
Цитата Сообщение от veles123 Посмотреть сообщение
кол-во повторений.
Повторений чего? Одинаковых чисел в массиве?
0
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
27.01.2014, 16:04
Лучший ответ Сообщение было отмечено veles123 как решение

Решение

veles123, Если я правильно понял что ты хочешь, то вложенный цикл начинай от i + 1, а не с 0
C++
1
for (int j = i + 1 ; j < 4; ++j)
3
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
27.01.2014, 16:14
Лучший ответ Сообщение было отмечено veles123 как решение

Решение

Цитата Сообщение от veles123 Посмотреть сообщение
C++
1
2
3
for (int i = 0; i < 4; ++i) {
   for (int j = 0; j < 4; ++j) {
      if (a[i]==a[j]) {++memo;}
ты здесь считаешь( сравниваешь ) число само с собой
так при первой итерации
(a[0]==a[0])

решений несколько
первое (не самое лучшее)
сравнивать индексы между собой, если не равны то сравнивать элементы
C++
1
2
3
for (int i = 0; i < 4; ++i) {
      for (int j = 0; j < 4; ++j) {
         if ((i!=j)&&(a[i]==a[j])) {++memo;}
второй подсказал cooller_94,
но немножко расширим
первый цикл должен проходить до предпоследнего элемента( последний не с чем сравнивать)
второй должен начинатся со следующего элемента на который указывает первый цикл
первый цикл указывает на 1 элемент второй начинается со второго
C++
1
2
3
for (int i = 0; i < 3; ++i) {
    for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j]) {++memo;}
1
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
27.01.2014, 16:29
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
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4];
    bool bf;
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
            bf=false;
            for (int j = 0; j < i; ++j) if (a[i]==a[j]) bf=true;
        for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j] && !bf) 
            {++memo;}
        }
        
    }
    std::cout<<memo;
    std::system ("pause");
    return 0;
}
1
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 17:16  [ТС]
Прошу извинения, но я немного не так выразился.
Нужно что бы выводило кол-во повторяющихся чисел. А не кол-во повторений.

Добавлено через 3 минуты
Прошу прощения, я не так выразился.
Нужно что бы выводилось количество повторяющихся чисел, а не кол-во повторений.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
27.01.2014, 17:53
Хех
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
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4], b[2];
    bool bf, bf1;
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
            bf=false;
            for (int j = 0; j < i; ++j) if (a[i]==a[j]) bf=true;
        for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j] && !bf) 
            {
                bf1=true;
                for (int z=0; z<memo;z++) bf1= (bf1==true && b[z]!=a[i]); 
                if (bf1) 
                {
                    b[memo]=a[i];
                    ++memo;
                }
            }
        }
        
    }
    std::cout<<memo;
    std::system ("pause");
    return 0;
}
0
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 18:22  [ТС]
Этот неправильно работает.

Цитата Сообщение от mustimur Посмотреть сообщение
Хех
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
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4], b[2];
    bool bf, bf1;
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
            bf=false;
            for (int j = 0; j < i; ++j) if (a[i]==a[j]) bf=true;
        for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j] && !bf) 
            {
                bf1=true;
                for (int z=0; z<memo;z++) bf1= (bf1==true && b[z]!=a[i]); 
                if (bf1) 
                {
                    b[memo]=a[i];
                    ++memo;
                }
            }
        }
        
    }
    std::cout<<memo;
    std::system ("pause");
    return 0;
}

Я немного подправил свой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
int main()
{
    int a[4][2];
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i][1];
    }
    int memo;
    memo=1;
    for (int i = 0; i < 3; ++i) {
 
        for (int j = i+1; j < 4; ++j) {
            if ((a[i][1]==a[j][1])&&(a[j][2]!=1)) {++memo;a[j][2]=1;}
 
        }
    }
 
 
        std::cout<<memo;
    return 0;
}
Не работает только в том случае, если все 4 числа повторяются. Просто зависает.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
27.01.2014, 18:24
Цитата Сообщение от veles123 Посмотреть сообщение
{++memo;a[j][2]=1;}
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]!=1
Цитата Сообщение от veles123 Посмотреть сообщение
int a[4][2];
куда полез, за пределы массива
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
27.01.2014, 18:28
Цитата Сообщение от veles123 Посмотреть сообщение
Этот неправильно работает.
а что не так в нем? я могу два скриншота сделать вроде тестировал!
0
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 18:31  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от veles123
{++memo;a[j][2]=1;}
Сообщение от veles123
a[j][2]!=1
Сообщение от veles123
int a[4][2];
куда полез, за пределы массива
Я добавил ещ поле в массиве для проверки, была-ли проверена ячейка. Что-бы не получалось что ячейки будут несколько раз проверяться и в итоге вместо 4-х повторений получалось 7.
Но теперь вложеный цикл повторяется вечно. только из-за чего о_О
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
27.01.2014, 18:33
Цитата Сообщение от veles123 Посмотреть сообщение
Я добавил ещ поле в массиве для проверки, была-ли проверена ячейка.
ты не видишь что вылазишь за пределы массива
у тебя две строчки в массиве а ты лезешь в третью

Добавлено через 50 секунд
Цитата Сообщение от veles123 Посмотреть сообщение
Но теперь вложеный цикл повторяется вечно. только из-за чего о_О
из за того что вылазишь за массив и портишь переменные цикла
0
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 18:42  [ТС]
Цитата Сообщение от mustimur Посмотреть сообщение
а что не так в нем? я могу два скриншота сделать вроде тестировал!
В любом случае показывает что повторенных чисел 1. А если их не, то 0.

Добавлено через 7 минут
j не становится больше чем 2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
int main()
{
    int a[4][2];
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i][1];
    }
    int memo;
    memo=1;
    for (int i = 0; i < 3; ++i) {
 
        for (int j = i+1; j < 4; ++j) {
            if ((a[i][1]==a[j][1])&&(a[j][2]!=1)) {++memo;a[j][2]=1;}
                }
    }
 
 
        std::cout<<memo;
    return 0;
}
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
27.01.2014, 18:48
Цитата Сообщение от veles123 Посмотреть сообщение
j не становится больше чем 2.
внимательно смотри
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]!=1
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]=1
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
27.01.2014, 18:53
Цитата Сообщение от veles123 Посмотреть сообщение
В любом случае показывает что повторенных чисел 1. А если их не, то 0.
так объясняйте задачу. я понял так ряд: {1 1 2 3} = повтор. чисел 1; {1 1 1 3} = повтор. чисел 1;{1 1 1 1} = повтор. чисел 1; {3 1 1 3} = повтор. чисел 2; {5 2 1 3} = повтор. чисел 0. или как?
0
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 18:56  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от veles123
j не становится больше чем 2.
внимательно смотри
Сообщение от veles123
a[j][2]!=1
Сообщение от veles123
a[j][2]=1
??
Капец, я растерян. Нифига не пойму.
Вроде бы
a[j][2]!=1
это, как бы второе измерение массива что-ли.
Или нет?

Ну там
a[номер ячейки в первой строке] [номер ячейки во второй строке]
Или я не так понимаю?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
27.01.2014, 18:59
Цитата Сообщение от veles123 Посмотреть сообщение
a[номер ячейки в первой строке] [номер ячейки во второй строке]
фиг вам
a[номер ячейки в строке] [номер строки]
у тебя две строки 0 и 1 а ты лезешь в 2, то бишь в третью строку коей у тебя нет
1
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 19:08  [ТС]
Цитата Сообщение от mustimur Посмотреть сообщение
так объясняйте задачу. я понял так ряд: {1 1 2 3} = повтор. чисел 1; {1 1 1 3} = повтор. чисел 1;{1 1 1 1} = повтор. чисел 1; {3 1 1 3} = повтор. чисел 2; {5 2 1 3} = повтор. чисел 0. или как?

Если в строке три единицы, то должно выводить 3. Если в строке две пятерки(или лючое другое число) то должно выводить 2. И т.д.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
фиг вам
a[номер ячейки в строке] [номер строки]
у тебя две строки 0 и 1 а ты лезешь в 2, то бишь в третью строку коей у тебя нет
Охтыепт. Точно. Отсчет ведь с 0 идет.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
27.01.2014, 19:09
Цитата Сообщение от veles123 Посмотреть сообщение
Прошу извинения, но я немного не так выразился.
Нужно что бы выводило кол-во повторяющихся чисел. А не кол-во повторений.

Добавлено через 3 минуты
Прошу прощения, я не так выразился.
Нужно что бы выводилось количество повторяющихся чисел, а не кол-во повторений.
Так это как понимать?
0
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
27.01.2014, 19:19  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
фиг вам
a[номер ячейки в строке] [номер строки]
у тебя две строки 0 и 1 а ты лезешь в 2, то бишь в третью строку коей у тебя нет
Охтыепт. Точно. Отсчет ведь с 0 идет.

Добавлено через 6 минут
Цитата Сообщение от mustimur Посмотреть сообщение
Так это как понимать?
Если кол-во повторений, то в строке 1 2 1 0, повторение одно.

А если кол-во повторяющихся чисел, то 1 2 1 0, ответ будет два.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.01.2014, 19:19
Помогаю со студенческими работами здесь

Не понимаю в чем ошибка
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &quot;pch.h&quot; #include &lt;iostream&gt; const int N = 25; int writee(int a); int main() ...

Не понимаю в чем ошибка
Мне нужно вывести значение минимума и максимума в файл 2.txt, но при компиляции происходит ошибка. Помогите пожалуйста. Вот код: ...

Не понимаю в чем ошибка
задача заключается в том, чтобы ввести с клавы либо считать с файла двумерный массив вещественных чисел и вывести их на экран, так же нужно...

Неправильно считает дискриминант в чем проблема?
internal double ttyty(int a3, int b3, int c3,out double x1,out double x2) { x1 = x2 = 0; double d3 =...

Нужно посчитать количество слов в строке, но у меня считает все символы строки, в чем ошибка?
package zachet; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Insets; import...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru