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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Alic
1 / 1 / 0
Регистрация: 06.05.2012
Сообщений: 17
#1

Подсчитать количество различных цифр в десятичной записи натурального числа - C++

06.08.2012, 20:02. Просмотров 1648. Ответов 12
Метки нет (Все метки)

Тема: Строки.Множества.
3.1. Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ до тех пор, пока в строке не останется 1 символ.
3.2. Подсчитать количество различных цифр в десятичной записи натурального числа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2012, 20:02     Подсчитать количество различных цифр в десятичной записи натурального числа
Посмотрите здесь:
C++ Подсчитать количество различных цифр в десятичной записи натурального числа.
Подсчитать количество различных значащих цифр в десятичной записи натурального числа C++
Подсчитать количество цифр в десятичной записи целого неотрицательного числа C++
C++ Сколько различных цифр встречается в десятичной записи числа?
C++ Определить количество различных цифр, содержащихся в десятичной записи каждого элемента массива натуральных ч
Найти количество различных цифр данного натурального числа C++
В десятичной записи заданного числа подсчитать сумму цифр, стоящих на чётных местах C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
06.08.2012, 20:29     Подсчитать количество различных цифр в десятичной записи натурального числа #2
Сокращает на 1 символ сзади или спереди?
Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
06.08.2012, 21:52     Подсчитать количество различных цифр в десятичной записи натурального числа #3
1 вариант 1 задачи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
using namespace std; 
 
int main() {
    string s;
    getline(cin, s);
    while (s.length() != 1) {
        s.erase(0, 1);
        s.erase(s.length() - 1, 1);
        cout << s << endl;
    }
    return 0;
}
2 вариант 1 задачи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
using namespace std; 
 
int main() {
    string s;
    getline(cin, s);
    while (s.length() != 1) {
        if (s.length() != 2) {
            s.erase(0, 1);
            s.erase(s.length() - 1, 1);
        } else {
            s.erase(0, 1);
        }
        cout << s << endl;
    }
    return 0;
}
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
24
25
#include <iostream>
#include <string>
 
using namespace std; 
 
int main() {
    string s;
    getline(cin, s);
    for (unsigned i = 0; i < s.length(); i++) {
        for (unsigned j = i + 1; j < s.length(); j++) {
            if (s[i] == s[j]) {
                s.erase(j, 1);
                j--;
            }
        }
    }
    int k = 0;
    for (unsigned i = 0; i < s.length(); i++) {
        if (isdigit(s[i])) {
            k++;
        }
    }
    cout << k << endl;
    return 0;
}
Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 22:11     Подсчитать количество различных цифр в десятичной записи натурального числа #4
Blagovidov, у тебя в первой задаче вечный цикл, если длина строки 0. К тому же ты вытираешь как спереди так и сзади. Я думаю там нужен треугольник вот что-то такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string str;
    cin >> str;
    while (str.length() >= 1)
    {
        cout << str << endl;
        if (str.length() <= 1) // we need str with length == 1 after cycle so breaking
            break;
        str.resize(str.length() - 1);
    }
    return 0;
}
Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
06.08.2012, 22:19     Подсчитать количество различных цифр в десятичной записи натурального числа #5
1 вариант 1 задачи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
using namespace std; 
 
int main() {
    string s;
    getline(cin, s);
    while (s.length() > 1) {
        s.erase(s.length() - 1, 1);
        cout << s << endl;
    }
    return 0;
}
условие не так прочитал и понял) спасибо что поправил про длину) твой вариант тоже верный)

вернее будет так:
C++
1
while (str.length() >= 1)
Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 22:26     Подсчитать количество различных цифр в десятичной записи натурального числа #6
Blagovidov, ага, теперь хорошо ))

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 <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    int n[10] = {0};
    char* str = new char();
    cin >> str;
    while (*str)
    {
        int nSymb = *str - '0';
        if (nSymb >= 0 && nSymb <= 9)
            n[nSymb]++;
        str++;
    }
    for (size_t i = 0; i < 10; i++)
    {
        cout << i << " : " << n[i] << endl;
    }
    return 0;
}
PS: Если надо - обьясню =)
novi4ok
06.08.2012, 22:59
  #7

Не по теме:

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

Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 23:04     Подсчитать количество различных цифр в десятичной записи натурального числа #8
novi4ok,

Не по теме:

Ну отвлечься от работы - самое то )))

Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
06.08.2012, 23:06     Подсчитать количество различных цифр в десятичной записи натурального числа #9
Цитата Сообщение от novi4ok Посмотреть сообщение

Не по теме:

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

Не по теме:

Мы то не бездельники) просто сейчас много свободного времени и не лень помочь человеку, учитывая, что это не трудно =)

nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
06.08.2012, 23:22     Подсчитать количество различных цифр в десятичной записи натурального числа #10
Alic, как вариант решения на базе restoring division

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
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <iterator>
#include <set>
#include <limits>
 
typedef std::pair <unsigned, unsigned> Division;
 
Division RestoringDivision(unsigned num, unsigned denum) {
   unsigned zero = 0x00;
   unsigned t;
   Division result;
   std::size_t bits = std::numeric_limits <unsigned>::digits;
   for (std::size_t i = 1; i <= bits; i++) {
      t = zero >> (bits - 1);
      zero = (zero << 1) | (num >> (bits - 1));
      num = num << 1;
      if ((zero | t) >= denum) {
         zero = zero - denum;
         num = num + 1;
      }
   }
   result.first = num;
   result.second = zero;
   
   return result;
}
 
template <typename T, unsigned NUMBER>
struct GetDigit : public std::unary_function <void, T> {
   static std::size_t current_digit;
   T operator()() const {
      unsigned temp = NUMBER;
      unsigned result;
      Division q = { temp, 0 };
      for (std::size_t i = 0; i < current_digit; i++) {
         Division remainder = RestoringDivision(q.first, 10);
         q = RestoringDivision(q.first, 10);
         result = remainder.second;
      }
      current_digit++;
      
      return result;
   }
};
 
const unsigned number = 72019120;
 
template <typename T, unsigned NUMBER>
std::size_t GetDigit <T, NUMBER>::current_digit = 1;
 
int main() {
   std::vector <unsigned> v_numbers(std::to_string(number).size());
   std::generate(
      v_numbers.begin(),
      v_numbers.end(),
      GetDigit <unsigned, number>()
   );
   std::set <unsigned> unique_digits(v_numbers.begin(), v_numbers.end());
   
   std::cout << unique_digits.size();
}
http://liveworkspace.org/code/79d3df...34f047f0f58d8f
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.08.2012, 00:23     Подсчитать количество различных цифр в десятичной записи натурального числа #11
Цитата Сообщение от Blagovidov Посмотреть сообщение

Не по теме:

Мы то не бездельники) просто сейчас много свободного времени и не лень помочь человеку, учитывая, что это не трудно =)

Не по теме:


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

Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
07.08.2012, 00:53     Подсчитать количество различных цифр в десятичной записи натурального числа #12
Цитата Сообщение от novi4ok Посмотреть сообщение

Не по теме:


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

Не по теме:

Соглашусь=)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2012, 10:39     Подсчитать количество различных цифр в десятичной записи натурального числа
Еще ссылки по теме:
Составить программу,которая для любого натурального числа печатает количество цифр в записи этого числа C++
Дано натурально число N. Сколько различных цифр встречается в его десятичной записи? C++
C++ Дано натурально число N. Сколько различных цифр встречается в его десятичной записи?
C++ Множества: дано N натуральных чисел. Сколько различных цифр встречается в его десятичной записи?
C++ Проверить, есть ли в десятичной записи заданного натурального числа две единицы подряд

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

Или воспользуйтесь поиском по форуму:
zitxbit
Master C/C++
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
07.08.2012, 10:39     Подсчитать количество различных цифр в десятичной записи натурального числа #13
Вариант 1 решения задачи 3.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
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <conio.h>
 
int main()
{
    long value = 329784849;
 
    int i = 0;
    int* digits = new int[32]; 
    for (; value > 0; value/=10)
        digits[i++] = value % 10;
 
    int diff = 0;
    for (int r = i-1; r >= 0; r--)
    {
        int count = 0;
        for (int n = 0; n < i-1; n++)
            if (digits[n] == digits[r])
                count++;
 
        if (count <= 1) 
        {
            printf("%d ",digits[r]);
            diff++;
        }
    }
 
    printf("\ndifferent digits = %d\n",diff);
 
    _getch();
 
    return 0;
}
http://liveworkspace.org/code/f3c9ee...b033df76cd45bf

Вариант 2 решения задачи 3.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
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <conio.h>
 
int main()
{
    char sv[] = "329784849";
 
    int* digits = new int[10];
    for (int i = 0; sv[i] != '\0'; i++)
    {
        int count = 0;
        for (int k = i; sv[k] != '\0'; k++)
            if (sv[k] == sv[i]) count++;
 
        if (digits[sv[i] - '0'] <= 0)
            digits[sv[i] - '0'] = count;
    }
 
    int count = 0;
    for (int i = 0; i < 10; i++)
        if (digits[i] == 1)
        {
            printf("%d - %d\n",i,digits[i]);
            count++;
        }
 
    printf("\ndifferent digits = %d\n",count);
 
    _getch();
 
    return 0;
}
http://liveworkspace.org/code/0ac783...e7b3c40bc3bcc0
Yandex
Объявления
07.08.2012, 10:39     Подсчитать количество различных цифр в десятичной записи натурального числа
Ответ Создать тему
Опции темы

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