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

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

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

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

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

Добавлено через 1 час 34 минуты
Ну хоть какие нибудь идеи..
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2011, 21:35
Ответы с готовыми решениями:

Как найти сумму тех двузначных чисел, в запись которых входит хотя бы одна цифра 7
Всем добрый вечер. Помогите решить задачу: Дана последовательность из N целых двузначных чисел...

Сосчитать среднее арифметическое тех отрицательных чисел, в десятичной записи которых встречается ровно две цифры 5
С клавиатуры вводятся целые числа. Окончание ввода – число ноль. Ноль используется только для...

Найти среднее арифметическое тех элементов массива, запись которых начинается с цифры 5
добрый день всем! не могу понять с чего начать (с++): "В массиве из целых чисел найти среднее...

Вычислить сумму тех чисел отрезка (a, b), в запись которых входит цифра k
Тип программа должна подсчитать сколько значений между а,б именют k. Тип сколько чисел от 20 до...

7
3492 / 1660 / 597
Регистрация: 29.11.2010
Сообщений: 3,457
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;
}
1
Диссидент
Эксперт C
26348 / 16355 / 3557
Регистрация: 24.12.2010
Сообщений: 36,210
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];
}
1
Renerker
08.04.2011, 13:53 4
Отличный вариант...очень помог.Спасибо
Freelance
Эксперт С++
2884 / 1819 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
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;
}
2
3492 / 1660 / 597
Регистрация: 29.11.2010
Сообщений: 3,457
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;
}
1
Диссидент
Эксперт C
26348 / 16355 / 3557
Регистрация: 24.12.2010
Сообщений: 36,210
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]
1
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2011, 08:01

Найти сумму тех элементов массива, цифровая запись которых дает четную сумму цифр
Дан массив натуральных чисел А(N), значения элементов которого лежат в диапазоне . Найти сумму тех...

Вычислить сумму тех чисел из заданного отрезка [a, b], в запись которых входит цифра k
Вычислить сумму тех чисел из заданного отрезка (a, b – натуральные числа), в запись которых входит...

Вычислить сумму тех чисел из заданного отрезка, в запись которых входит цифра k
Решить задачу с использованием процедур. Указать выделенные подзадачи, решаемые процедурами....

Вычислить сумму тех чисел из заданного отрезка [a, b] (a, b – натуральные), в запись которых входит цифра k
Вычислить сумму тех чисел из заданного отрезка (a, b – натуральные), в запись которых входит цифра...

Вычислить сумму тех чисел из заданного отрезка [a, b] (a, b – натуральные), в запись которых входит цифра k.
Вычислить сумму тех чисел из заданного отрезка (a, b – натуральные), в запись которых входит цифра...

Найти все четырехзначные числа, в которых ровно две одинаковых цифры
Найти все четырехзначные числа, в которых ровно две одинаковых цифры


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru