Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

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

23.08.2011, 16:15. Показов 973. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
решите плиз кому не трудно очень нужно...
Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана строкой символов (string) заканчивается символом ‘*’.
2.Найти длину такого первого идентификатора в котором произведение всех четных цифр максимально.

 Комментарий модератора 
Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2011, 16:15
Ответы с готовыми решениями:

Найти длину такого первого идентификатора, в котором произведение всех четных цифр максимально
Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана...

Найти номер столбца матрицы, в котором произведение всех элементов максимально
Дана матрица N*N все элементы положительные. Необходимо найти номер столбца в котором произведение...

Ввести 10 цифр. Найти произведение всех четных
var i: BYTE; m:array of integer; d: real; begin write('Введите числa : '); ...

Найти сумму всех четных цифр, входящих в строку
дан текст содержащий буквы и цифры. Найти сумму всех четных цифр входящих в этот массив!

6
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
23.08.2011, 17:58 2
приведи пример файла, что в нём?
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
23.08.2011, 18:04 3
lexflax, фиг его знает, если правильно тебя понял, то примерно так:

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
#include <iostream>
#include <algorithm>
#include <numeric>
#include <vector>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
 
struct Multiply {
private:
   std::size_t index;
   
public:
   Multiply() : index(1) {  }
   int operator()(int number_one, int number_two) {
      if (!(index++ % 2)) {
         return number_one * number_two;
      } 
      
      return number_one;
   }
};
 
struct Generate {
private:
   std::string::const_iterator p;
 
public:
   Generate(std::string::const_iterator ptr) : p(ptr) {  }
   int operator()() {
      return (*p++ - '0');
   }
};
 
int main() {
   std::string str_numbers = "23434   87568576 1234    3435414 24257   43435 123864872365000*";
   std::vector <std::string> v_str;
   int max_number = 0;
   std::string res;
   
   boost::split(v_str, str_numbers, boost::is_any_of(" *"), boost::token_compress_on);
   
   std::for_each(v_str.begin(), v_str.end(), [&max_number, &res](const std::string& str) {
      std::vector <int> v_nums(str.size());
      std::generate(v_nums.begin(), v_nums.end(), Generate(str.begin()));
      int number = std::accumulate(v_nums.begin(), v_nums.end(), 1, Multiply());
      if (number > max_number) {
         max_number = number;
         res = str;
      }
   } );
   
   std::cout << res.size() << std::endl;
 
   return 0;
}
1
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
23.08.2011, 18:51 4
Немного проще:
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
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <sstream>
#include <iterator>
 
typedef long long  T_num;
 
T_num  mul_even_digs(T_num n){
  T_num  res = 1;
  for(; n; n /= 10)
    if( !((n % 10) % 2) )
      res *= n % 10;
  return res;
}
 
int main(){
  std::string str("23434   87568576 1234    3435414 24257   43435 1238648723690*");
  std::istringstream ist(str);
  std::istream_iterator<T_num> bg(ist), fn;
  std::vector <T_num> nums(bg, fn);
  std::cout << floor(log10(*std::max_element(nums.begin(), nums.end(), [](T_num a, T_num b) -> bool{
    return mul_even_digs(a) < mul_even_digs(b);
  })) + 1);
  return 0;
}
0
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.08.2011, 00:14 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
27
28
29
30
31
#include <string.h>
#include <stdio.h>
 
int n_length(const char* str) {
   int len, ch;
   for(len = 1; *str; *str++) {
         if(!((ch = *str - 0x30)%2))
              len *= ch;
   }
   return len;
}
 
int  main(void) {
     char str[]      = "2111 132822 45679 44443 88 742229*";
 
     char  buf[32] = { '\0' }, *tok;
     int   imax   = 0, tmp;
 
     for(tok = strtok(str, " *"); tok; tok = strtok(NULL, " *")) {
             tmp = n_length(tok);
             if(tmp > imax) {
                     imax = tmp;
                     strncpy(buf, tok, strlen(tok) + 1u);
            }
     }
     if( *buf ) 
          printf("ID: %s\n", buf);
 
     getchar();
     return 0;
}
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
24.08.2011, 12:31 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
36
37
#include <stdio.h>
 
#define is_digit(val) ((((val) >= '0') && ((val) <= '9')) ? 1 : 0)
 
unsigned long get_tok_sum(char *_in, char** point, const char stop_sym) {
    unsigned long res = 1;
    char *p = _in;
 
    if( 0 == _in ) return res;
 
    while( *p != stop_sym && !is_digit(*p) ) p++;
 
    while( is_digit(*p) ) {
        if( ++s % 2 == 0 )
            res *= (*p - '0');
        p++;
    }
    *point = p;
    return res;
}
 
int main() {
 
    char str[]      = "2111 132822 45679 44443 88 999999*";
    char *p = str;
    unsigned long max = 0;
    unsigned long tmp = 0;
    
 
    while( *p != '*' ) {
        tmp = get_tok_sum(p, &p, '*');
        max = max > tmp ? max : tmp;
    }
 
    printf("%u\n", max);
    return 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
#include <stdio.h>
 
#define is_digit(val) ((((val) >= '0') && ((val) <= '9')) ? 1 : 0)
 
unsigned long get_max_tok(char *_in, const char stop_sym) {
    unsigned long res = 0;
    unsigned long new_res = 0;
    char *p = _in;
 
    if( 0 == _in || *_in == stop_sym ) return res;
 
    while( *p != stop_sym && !is_digit(*p) ) p++;
 
    while( is_digit(*p) ) {
        res += (*p - '0');
        p++;
    }
    new_res = get_max_tok(p, stop_sym);
    return (res > new_res) ? res : new_res;
}
 
int main() {
 
    char str[]      = "2111 132822 99999999 45679 44443 88 999999 435234 3456 3546 3546 3456 34563 456 3456 *";
    char *p = str;
 
    printf("%u\n", get_max_tok(p, '*'));
    return 0;
}
Добавлено через 11 минут
а, не заметил в условии про четные цифры и произведение
тогда просто добавить:
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
#include <stdio.h>
 
#define is_digit(val) ((((val) >= '0') && ((val) <= '9')) ? 1 : 0)
 
unsigned long get_max_tok(char *_in, const char stop_sym) {
    unsigned long res = 1;
    unsigned long new_res = 0;
    unsigned long s = 0;
    char *p = _in;
 
    if( 0 == _in || *_in == stop_sym ) return res;
 
    while( *p != stop_sym && !is_digit(*p) ) p++;
 
    while( is_digit(*p) ) {
        if( ++s % 2 == 0 )
            res *= (*p - '0');
        p++;
    }
    new_res = get_max_tok(p, stop_sym);
    return (res > new_res) ? res : new_res;
}
 
int main() {
 
    char str[]      = "15151515 999999*";
    char *p = str;
 
    printf("%u\n", get_max_tok(p, '*'));
    return 0;
}
в первый вариант так же переделать.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
04.09.2011, 15:31  [ТС] 7
nameless,Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана строкой символов (string) заканчивается символом ‘*’.
2.Найти длину такого первого идентификатора в котором произведение всех четных цифр максимально. А можно тоже задание но попроще описать? вот что такое индентификатор в моей задаче? я думал это буква но тогда причем тут произведение цифр? откуда тогда цифры возмутся
0
04.09.2011, 15:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2011, 15:31
Помогаю со студенческими работами здесь

Найти число на отрезке [x;y], произведение цифр которого максимально
Помогите, пожалуйста, написать программу: Найти число на отрезке , произведение цифр которого...

Определить произведение всех четных цифр числа
Дано целое 7ми значное число Н Определить произведение всех ПАРНЫх цифер ... #define...

Найти сумму всех цифр и произведение всех цифр заданного числа
Дано трехзначное целое число X. Найти сумму всех его цифр, произведение всех цифр. Вывести новое...

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

дано натуральное число N. Определить,во сколько раз произведение цифр числа больше суммы цифр.Найти количество чётных цифр в записи числа!!
дано натуральное число N. Определить,во сколько раз произведение цифр числа больше суммы цифр.Найти...

Требуется найти такое число из списка натуральных чисел, произведение цифр которого максимально приближено к K
В первой строке входного файла содержатся два натуральных числа: N (N ≤ 1000) – количество...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru