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

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

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

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

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

Тема: Строки.Множества.
3.1. Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ до тех пор, пока в строке не останется 1 символ.
3.2. Подсчитать количество различных цифр в десятичной записи натурального числа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2012, 20:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчитать количество различных цифр в десятичной записи натурального числа (C++):

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

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

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

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

Определить количество различных цифр, содержащихся в десятичной записи каждого элемента массива натуральных ч - C++
Определить количество различных цифр, содержащихся в десятичной записи каждого элемента массива натуральных чисел. Использовать...

Найти количество различных цифр данного натурального числа - C++
help #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int _tmain(int argc, _TCHAR* argv) { ...

12
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
06.08.2012, 20:29 #2
Сокращает на 1 символ сзади или спереди?
0
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;
}
1
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;
}
1
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)
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: Если надо - обьясню =)
1
novi4ok
06.08.2012, 22:59
  #7

Не по теме:

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

0
Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 23:04 #8
novi4ok,

Не по теме:

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

0
Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
06.08.2012, 23:06 #9
Цитата Сообщение от novi4ok Посмотреть сообщение

Не по теме:

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

Не по теме:

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

0
nameless
Эксперт С++
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/79d3dfb4ac679e7e8a34f047f0f58d8f
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.08.2012, 00:23 #11
Цитата Сообщение от Blagovidov Посмотреть сообщение

Не по теме:

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

Не по теме:


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

1
Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
07.08.2012, 00:53 #12
Цитата Сообщение от novi4ok Посмотреть сообщение

Не по теме:


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

Не по теме:

Соглашусь=)

1
zitxbit
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/f3c9ee1b999c66bbb4b033df76cd45bf

Вариант 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/0ac783fda6dddac1c1e7b3c40bc3bcc0
2
07.08.2012, 10:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2012, 10:39
Привет! Вот еще темы с ответами:

В десятичной записи заданного числа подсчитать сумму цифр, стоящих на чётных местах - C++
дано число. подсчитать сумму цифр в десятичной записи этого числа, стоящих на четных местах числа

Найти количество цифр в десятичной записи числа - C++
На C++ нужны программки Дано число N, 1: Найти количество цифр в десятичной записи числа 2: количество цифр в десятичной записи...

Составить программу,которая для любого натурального числа печатает количество цифр в записи этого числа - C++
Помагите решить такую штукенцию=) Составить программу,которая для любого натурального числа печатает количество цифр в записи этого...

Дано натурально число N. Сколько различных цифр встречается в его десятичной записи? - C++
Ребят, помогите, пожалуйста, с созданием программного кода на С++. Вот, собственно, и сама задача: Дано натурально число N. Сколько...


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

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

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