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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
#1

Найти все числа в массиве которые заканчиваются на число 47 - C++

06.04.2014, 14:17. Просмотров 954. Ответов 13
Метки нет (Все метки)

Помогите пожалуйста решить задачу:
Неоходимо найти все числа в массиве (диапазон случайных чисел от 200 до -200) которые заканчиваются на 47 (как я понял вариантов будет не много. -47 47 -147 147) и вывести эти числа с ихними индексами в массиве.
Пример:

Число -47 | Ряд 2 | Строка 7
Число 147 | Ряд 4 | Строка 8

Знакомый сказал что можно реализовать это задание следующим способом. От каждого числа из массива отнять 47 и то что получится разделить на 10. Если получится целое число в результате - выписывем наш элемент. Проблема в том что я не до конца понимаю как это реализовать, особенно с отрицательными числами.


P.S Если не сложно - объясните саму процедуру поиска таких числел (если например числа будут заканчиваться на 23 или на 14)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2014, 14:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти все числа в массиве которые заканчиваются на число 47 (C++):

Найти все числа диапазона, которые заканчиваются на любую парную цифру. - C++
Решить задачу тремя способами используя операторы цикла while, do while и for. Задача: Вывести на экран все целые числа диапазона от A...

Удалить все числа, которые начинаются и заканчиваются на одну и ту же цифру - C++
в одномерном массиве заменить все числа начинаются и заканчиваются на одну и ту же цифру Добавлено через 3 минуты сори ошибка в...

Масивы: удалить все числа которые начинаются и заканчиваются на одну и ту же цифру - C++
В одномерном массиве удалить все числа начинаются и заканчиваются на одну и ту же цифру

Найти все двузначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3 - на 4. - C++
Привет мозги, нужно решить задачу по Си++. Найти все двузначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3...

В строке символов найти все слова, которые начинаются и заканчиваются одинаковой буквой - C++
Помогите сделать программу Вот задания: В строке символов найти все слова которые начинаются и заканчиваются одинаковой буквой

Строки. Найти все слова, которые начинаются и заканчиваются одной и той же буквой. - C++
задан текст. найти все слова, которые начинаются и заканчиваются одной и той же буквой.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
stealzy
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
06.04.2014, 14:31 #2
fmod — вычисление остатка от деления нацело для чисел с плавающей точкой
remainder(x,y) вычисляет остаток от деления
http://ru.wikipedia.org/wiki/Math.h

C++
1
2
3
#include <math.h>
...
if (remainder(n, 100)=47) then ...
0
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
06.04.2014, 14:40  [ТС] #3
причем здесь fmod вообще? вы прочитали мой вопрос до конца?
0
AndrSlav
44 / 44 / 6
Регистрация: 20.12.2013
Сообщений: 259
06.04.2014, 14:47 #4
А можно сравнить последние биты - если число заканчивается на 101111, то последние цифры будут "47". По крайней мере для целых чисел, для действительных тоже, наверно, можно изловчиться.

Добавлено через 2 минуты
Цитата Сообщение от rafull6 Посмотреть сообщение
разделить на 10
На 100.
0
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
06.04.2014, 15:02  [ТС] #5
Задачу решил таким методом:
C++
1
2
3
4
5
6
7
8
9
10
11
void check()
{
      for (int i=0; i<n; i++)
      {
        for (int j=0; j<m; j++)
        {
             if(ar[i][j]%100==47||ar[i][j]%100==-47||ar[i][j]%10==47||ar[i][j]%10==-47) 
            cout<<ar[i][j]<<endl;
        }
      }
}
так как в моем случае диапазон чисел массива от -200 до 200, делим каждое число на 100. Если остаток 47 или -47 - выводим элемент в консоль. Потом делим каждое число на 10. Если остаток 47 или -47 - выводим элемент в консоль. Таким образом мы захватываем и двузначные и трехзначные элементы.
0
stealzy
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
06.04.2014, 15:03 #6
причем здесь fmod вообще? вы прочитали мой вопрос до конца?
Как вы собираетесь реализовывать предложение вашего знакомого?
C++
1
2
3
if ( (fmod( (n-47)/100 ) == 0) and (n!=0) ) {
//число кончается на 47
}
0
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
06.04.2014, 15:05  [ТС] #7
Посмотрите мой предыдущий пост.
Хотя ваш способ выглядит более окуратнее.
0
stealzy
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
06.04.2014, 15:10 #8
А зачем вы делите на 10, если вам нужны числа,
которые заканчиваются на число 47
а?
Точнее формулируйте свои хотелки
0
Байт
Эксперт C
16063 / 10332 / 1540
Регистрация: 24.12.2010
Сообщений: 19,478
06.04.2014, 15:17 #9
rafull6, Такого
C++
1
ar[i][j]%100==-47
не будет никогда. Остаток от целочисленного деления всегда число неотрицательное
C++
1
2
3
4
5
6
for (int j=0; j<m; j++)
        {
             int x = ar[i][j];
             if (x < 0) x = -x;
             if((x%100)==47) cout<<ar[i][j]<<endl;
        }
Такое
C++
1
ar[i][j]%10==47
тоже бывает не часто.
Вспомните, что такое остаток от деления

Добавлено через 6 минут
stealzy,
C++
1
if ( (fmod( (n-47)/100 ) == 0) and (n!=0) )
А если n < 0? Не катит ваш код.
И при чем тут fmod? Числа-то целые. А при чем n!=0 ?
Цитата Сообщение от rafull6 Посмотреть сообщение
Хотя ваш способ выглядит более АККуратнО.
Можно просто "выглядит аккуратнее". Так вот, этот способ не выглядит НИКАК
1
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
06.04.2014, 15:20  [ТС] #10
Цитата Сообщение от stealzy Посмотреть сообщение
А зачем вы делите на 10, если вам нужны числа,
которые заканчиваются на число 47
а?
Точнее формулируйте свои хотелки
Прошу прощения. Виноват.



Байт,
Ваш вариант работает отлично! Спасибо за помощь
0
stealzy
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
06.04.2014, 15:25 #11
более окуратнее

Если вам надо просто включение числа 47, то:

C++
1
2
3
4
5
6
7
8
9
for (int j=0; j<m; j++)
        {
             int x = ar[i][j];
             if (x < 0) x = -x;
             for (int r=x; r>46; r=floor(r/10))
                  {
                       if((r%100)==47) cout<<ar[i][j]<<endl;
                  }
        }
Еще красивее было бы использовать regex
0
Байт
Эксперт C
16063 / 10332 / 1540
Регистрация: 24.12.2010
Сообщений: 19,478
06.04.2014, 15:31 #12
stealzy,
C++
1
2
3
4
for (int r=x; r>46; r/=10)
{
if((r%100)==47) { cout<<ar[i][j]<<endl; break; }
}
А то 4747 выведется 2 раза. Хотя там условие -200, 200, но все-таки
И почему вы так настойчиво применяете операции для double к целым числам? Нет, ошибки тут не будет. Но некрасиво. Не окуратно
0
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
06.04.2014, 15:34  [ТС] #13
Можно уточнить еще один момент? Как вывести в консоль не просто найденые элементы а еще их индексы в массиве?

Пример:
147 2 5
2 - строка, 5 - столбец
0
Байт
Эксперт C
16063 / 10332 / 1540
Регистрация: 24.12.2010
Сообщений: 19,478
06.04.2014, 15:41 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
cout << "a=" << a[i][j] << " i=" i << " j=" << j << endl;
или
C++
1
cout << "a[" << i << "][" << j << "]=" << a[i][j] << endl;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2014, 15:41
Привет! Вот еще темы с ответами:

В заданном массиве натуральных чисел заменить все числа на такие числа, которые получаться из исходного записью его цифр в обратном порядке - C++
Ребят выручайте не могу зачет сдать из-за этой лабы =( не могу сделать. надо сделать через тип данных вектор. &quot; В заданном массиве...

Вывести все числа, которые встречаются в этом массиве несколько раз - C++
Дан массив, состоящий из 100 целых чисел. а) Вывести все числа, которые встречаются в этом массиве несколько раз. б) Вывести все...

Найти максимальное число в массиве и определить, сколько цифр числа делятся на число Z - C++
Массив intA=

Дан массив. Выберите из него все элементы, которые встречаются в массиве наибольшее число раз - C++
СРОЧНО!!! ПОМОГИТЕ ПОЖАЛУЙСТА,ОЧЕНЬ НУЖНО!!! ЗАРАНИЕ БЛАГОДАРЮ!) ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.04.2014, 15:41
Ответ Создать тему
Опции темы

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