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

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

Войти
Регистрация
Восстановить пароль
 
Renerker
Сообщений: n/a
#1

Найти сумму тех элементов, в запись которых входит ровно две цифры - C++

07.04.2011, 21:35. Просмотров 784. Ответов 7
Метки нет (Все метки)

Задача: Дан одномерный массив из N элементов. Найти сумму тех элементов, в запись которых входит ровно две цифры. Пример: 112212

Делал все это через циклы определяя последние 2 цифры элемента и сравнивал с ними остальные.
Получилась большая программа. Говорят можно сделать проще, а именно через некую функцию (которой я естественно не знаю). Не подскажите что за функция?

Добавлено через 1 час 34 минуты
Ну хоть какие нибудь идеи..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2011, 21:35     Найти сумму тех элементов, в запись которых входит ровно две цифры
Посмотрите здесь:

Найти сумму тех элементов массива, цифровая запись которых дает четную сумму цифр C++
C++ Дана действительная матрица порядка N.Для данного натурального m(m<=2N) найти сумму тех элементов матрицы, сумма индексов которых равна m.
C++ Вычислить сумму тех его элементов, значения которых есть четные числа
Найти сумму тех из элементов a2j(j=1,...,m), для которых a1j имеет значение наибольшего среди значений a11, a12,...,a1m C++
C++ Найти сумму тех из элементов a2j(j=1,...,m), для которых a1j имеет значение наибольшего среди значений
C++ Найти все пятизначные числа, в которых ровно две одинаковые цифры
Найти все пятизначные числа, в которых ровно две одинаковые цифры (только циклами !) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
08.04.2011, 00:32     Найти сумму тех элементов, в запись которых входит ровно две цифры #2
Нужно найти сумму элементов массива, десятичная запись которых состоит из двух цифр?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  const size_t array_size = 20;
  int array[array_size];
  int i;
 
  for (i = 0; i < array_size; ++i)
    printf("%5d", array[i] = rand() % 1000);
  printf("\n");
 
  int result = 0;
  for (i = 0; i < array_size; ++i)
    if (array[i] > 9 && array[i] < 100)
      result += array[i];
 
  printf("Sum of two-digit elements: %d.\n", result);
 
  return 0;
}
Байт
Эксперт C
15543 / 9885 / 1486
Регистрация: 24.12.2010
Сообщений: 18,487
08.04.2011, 12:34     Найти сумму тех элементов, в запись которых входит ровно две цифры #3
lemegeton, Ты считаешь просто двузначные числа. А требуется несколько другое. ТС даже привел пример 112122 - это число (как и 373) в твою сумму не попадает.
Может быть так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
char c[10];
for(i=s=0; i<n; i++) {
  memset(c, 0, 10);
  k = 0;
  b = a[i];
  while (b!=0) {
     cx = b%10;
     b /= 10;
     if (c[cx]!=0{ c[cx]=1; k++; }
     if (k>2) break;
  }
  if (b==0) s += a[i];
}
Renerker
Сообщений: n/a
08.04.2011, 13:53     Найти сумму тех элементов, в запись которых входит ровно две цифры #4
Отличный вариант...очень помог.Спасибо
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
08.04.2011, 15:05     Найти сумму тех элементов, в запись которых входит ровно две цифры #5
Еще вариант
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
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
 
int sum(std::vector<int> &v){
  static int res = 0;
  struct func{
    void operator() (const int &elem){
      std::ostringstream ost;
      ost << elem;
      std::string str = ost.str();
      if(std::unique(str.begin(), str.end()) - str.begin() == 2)
        res += elem;
    }
  };
  std::for_each(v.begin(), v.end(), func());
  return res;
}
 
int main(){
  int arr[] = {123, 21, 342, 441, 55};
  std::vector<int> vec(arr, arr + sizeof(arr) / sizeof(*arr));
  std::cout << sum(vec) << std::endl;
  return 0;
}
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
08.04.2011, 23:55     Найти сумму тех элементов, в запись которых входит ровно две цифры #6
Вот как. Ну тогда так.
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
int IsOfTwoDigits(int number) {
  int first_digit = number % 10;
  int second_digit = (number / 10) % 10;
  number /= 100;
  while (number > 0) {
    if (number % 10 != first_digit && number % 10 != second_digit)
      return 0;
    number /= 10;
  }
  return 1;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  const size_t array_size = 20;
  int array[array_size];
  int i;
 
  for (i = 0; i < array_size; ++i)
    printf("%5d", array[i] = rand() % 1000);
  printf("\n");
 
  int result = 0;
  for (i = 0; i < array_size; ++i)
    if (IsOfTwoDigits(array[i]))
      result += array[i];
 
  printf("Sum of two-digit elements: %d.\n", result);
 
  return 0;
}
Байт
Эксперт C
15543 / 9885 / 1486
Регистрация: 24.12.2010
Сообщений: 18,487
09.04.2011, 08:34     Найти сумму тех элементов, в запись которых входит ровно две цифры #7
lemegeton, а что если first_digit==second_digit ? Числа типа 2211 твой алгоритм отбросит.
Но мозговой штурм - великое дело!

Добавлено через 52 минуты
Можно немного модифицировать твой алгоритм
C
1
2
3
4
5
6
7
second_digit = first_digit = num % 10;
num /= 10;
while (num!=0 && second_digit==first_digit) {
 second_digit = num%10;
 num /= 10;
}
// далее как у тебя
А что. Довольно изящно получается. И не нужно шкалы char c[10]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2011, 08:01     Найти сумму тех элементов, в запись которых входит ровно две цифры
Еще ссылки по теме:

Подсчитать сумму тех элементов матрицы, у которых сумма индексов нечетна C++
Найти сумму элементов массива, цифры записи которых образуют возрастающую последовательность C++
Найти сумму элементов массива, имеющих ровно K цифр C++
Установить, что число содержит ровно две разные цифры C++
Найти сумму тех элементов заданной последовательности, сумма цифр которых нечётна C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.04.2011, 08:01     Найти сумму тех элементов, в запись которых входит ровно две цифры #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
bool Check(int x)
{
 int i,c;
 bool d[10];
 for (i=9; i>=0; --i)
 {
  d[i]=false;
 }
 for (i=x; i>0; i/=10)
 {
  d[i%10]=true;
 }
 for (c=0, i=9; i>=0; --i)
 {
   if (d[i])
   {
    ++c;
   }
 }
 if (c==2)
 {
  return true;
 }
 return false;
}
Yandex
Объявления
11.04.2011, 08:01     Найти сумму тех элементов, в запись которых входит ровно две цифры
Ответ Создать тему
Опции темы

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