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

Проверить что десятичное число содержит только цифры 0 и 3

02.09.2019, 16:23. Показов 1877. Ответов 13
Метки нет (Все метки)

Здравствуйте, вот суть задачи: нам необходимо найти комбинация чисел 0 и 3 и найти в каком оно расположена

Число называется счастливым, если оно содержит только цифры 0 и 3. Например, первые 5
счастливых чисел это 0, 3, 30, 33, 300. Числа нумеруются с единицы.
Формат входных данных
На ввод дается единственное число k (1 <= k <= 100 000).
Формат выходных данных
Выведите k-е по возрастанию счастливое число.


Ввод:1
Вывод: 0

Ввод: 4
Вывод: 33

Думаю суть задачи смог объяснить
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2019, 16:23
Ответы с готовыми решениями:

Проверить с помошью регулярных выражений, что строка содержит только цифры
как проверить с помошью регулярных выражений, что строка содержит только цифри\ только буквы?

Проверить что строка Содержит только цифры и заглавные символы латинского алфавита
Проверить что строка Содержит только цифры и заглавные символы латинского алфавита. Как это можно...

Проверить, что последовательность кроме букв содержит только одно число равное длине последовательности
Привет, пожалуйста помогите решить задачу. У меня все никак не выходит, а она нужна мне для...

Проверить, содержит ли заданное число четыре различные цифры
Ввести на форму целое четырехразрядное положительное число. Проверить, содержит ли заданное число...

13
Модератор
Эксперт С++
11033 / 9105 / 5467
Регистрация: 18.12.2011
Сообщений: 24,350
02.09.2019, 16:30 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool IsHappy(int n)
{
   while(n)
   {
         int t=n%10;
         if(t!=0 && t!=3)
           return false;
         n/=10; 
   }
   return true;
}
int main()
{
    int k;
    cin>>k;
    cout<<IsHappy(k);
}
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 16:42  [ТС] 3
zss, в любых значениях вводится 0

Добавлено через 2 минуты
zss,
немножечко поленился и напортачил вот это, но в условии k<100 000, поэтому можно ли еще как то исправить код,
Контестер дает на моем коде ошибку в 7 тесте
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
long long int a[]={0,0,3,30,33,300,303,330,333,3000,3003,3030,3033,3300,3303,3330,3333,30000,30003,30030,30033,
30300,30303,30330,30333,33000,33003,33030,33033,33300,33303,33330,33333,300000,300003,300030,300033,300300,300303,
300330,300333,303000,303003,303030,303033,303300,303303,303330,303333,330000,330003,330030,330033,330300,330303,
330330,330333,333000,333003,333030,333033,333300,333303,333330,333333};
int main() 
{
    int i, n;
    cin >> n;
    for (i = 0; i<n; i++);
        if(n==i)
            cout << a[i];
    return 0;
}
0
2542 / 1201 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.09.2019, 16:52 4
Xait,

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
 
bool IsHappy(int n)
{
    while (n)
    {
        int t = n % 10;
        if (t != 0 && t != 3)
            return false;
        n /= 10;
    }
    return true;
}
 
 
int main()
{
    int n = 9999;
    //cin >> n;
    for (int i = 0; i < n; i++)
    {
        if (IsHappy(i))
        {
            std::cout << i << std::endl;
        }
    }
}
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 17:07  [ТС] 5
rikimaru2013, Почти, теперь нам не надо вывести число, а знать на каком место число стоит

К примеру число 33 стоит на 4 месте и в ответе надо вывести 4
а на первом месте стоит 0
0
2542 / 1201 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.09.2019, 17:10 6
Xait, Мне так то ничего не надо. И уж точно не "почти", а полностью помог с твоими проблемами.
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 17:12  [ТС] 7
rikimaru2013, Извините за мою грубость, я думаю что не правильно выразился, можете помочь с задачей?
Вот сама условия и примеры
0
Миниатюры
Проверить что десятичное число содержит только цифры 0 и 3  
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 18:41  [ТС] 8
rikimaru2013, Просто zss написанные код был о том что когда ввожу с комбинацией 0 и 3 он показал результат в виде 0 и 1, и я не знал как вывести спасибо вам вы помогли вывести все эти значение в экране, но я хотель их присвоить в массив(но не смог реализовать), и с массиве хотел позвать i-тую элемент массива, но в итоге даже не смог сделать, можете помочь...?

Добавлено через 1 час 12 минут
rikimaru2013, Ну в общем сам подумал и додумался, немножечко ваш код под себя настроил и вот что случилось
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
 
bool IsHappy(int n)
{
    while (n)
    {
        int t = n % 10;
        if (t != 0 && t != 3)
            return false;
        n /= 10;
    }
    return true;
}
 
 
int main()
{
    int a[1000];
    int j=0;
    long long int n = 99999999;
    int cd;
    cin >> cd;
    for (int i = 0; i < n; i++)
    {
        if (IsHappy(i))
        {
            j++;
            a[j] = i;
            if (cd == j)
                break;
        }
    }
    for (int j = 0; j < n; j++)
    {
        if (j==cd)
        {
            std::cout << a[j] << std::endl;
        }
    }
}


и слава богу оно работает, теперь его надо оптимизировать в 11 тесте говорит что Превышено максимальное время работы на измененным мной коде, можно ли его как то оптимизировать?
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 18:45  [ТС] 9
Всем привет, вот в общем я хотел решить одну задачу суть задачи состоит следующим образом:

Число называется счастливым, если оно содержит только цифры 0 и 3. Например, первые 5
счастливых чисел это 0, 3, 30, 33, 300. Числа нумеруются с единицы.
Формат входных данных
На ввод дается единственное число k (1 <= k <= 100 000).
Формат выходных данных
Выведите k-е по возрастанию счастливое число.


Ввод:1
Вывод: 0

Ввод: 4
Вывод: 33


Вот сам код
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
 
bool IsHappy(int n)
{
    while (n)
    {
        int t = n % 10;
        if (t != 0 && t != 3)
            return false;
        n /= 10;
    }
    return true;
}
 
 
int main()
{
    int a[1000];
    int j=0;
    long long int n = 99999999;
    int cd;
    cin >> cd;
    for (int i = 0; i < n; i++)
    {
        if (IsHappy(i))
        {
            j++;
            a[j] = i;
            if (cd == j)
                break;
        }
    }
    for (int j = 0; j < n; j++)
    {
        if (j==cd)
        {
            std::cout << a[j] << std::endl;
        }
    }
}



Теперь следующий код ругается на контестере говорит что Превышено максимальное время работы, у меня к вам просьба есть ли способ его оптимизировать чтобы оно работала быстрее

Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
0
2417 / 1817 / 400
Регистрация: 15.12.2013
Сообщений: 7,893
02.09.2019, 18:53 10
Xait, вам нужно не код ускорять, а над алгоритмом подумать.
Подсказка: нет смысла проверять каждое число.
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 19:00  [ТС] 11
S_el, я пока нуб в этох делах, додумался до итого, можете помочь?
0
Продавец времени
5778 / 3187 / 732
Регистрация: 12.03.2015
Сообщений: 15,096
02.09.2019, 19:40 12
Лучший ответ Сообщение было отмечено Xait как решение

Решение

Вариант без бруфорса работает куда быстрее!

Проверить что десятичное число содержит только цифры 0 и 3


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint64_t foo(unsigned k)
{
  uint64_t x = 0, d = 3;
  k--;  
  
  while (k)
  {
    x += d * (k & 1); 
    k >>= 1;
    d *= 10;
  }
  
  return x;
}
1
Продавец времени
5778 / 3187 / 732
Регистрация: 12.03.2015
Сообщений: 15,096
02.09.2019, 19:48 13
Цитата Сообщение от Xait Посмотреть сообщение
S_el, я пока нуб в этох делах, додумался до итого, можете помочь?
Я запостил ответ в старой теме, посмотри.
0
607 / 458 / 268
Регистрация: 24.02.2017
Сообщений: 1,650
02.09.2019, 20:31 14
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 <sstream>
using namespace std;
 
int main()
{
    int k;
    stringstream s;
    string str;
 
    cin >> k;
    k-=1;
    unsigned long long int i = 1, binary = 0;
    while(k > 0) {
        binary += (k % 2) * i;
        k = k / 2;
        i *= 10;
    }
 
    s<<binary ;
    s>>str;
    for(int i=0;i<str.size();i++)
    cout <<(str[i]-'0')*3;
   system("pause");
   return 0;
}
Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    int k;
 
    cin >> k;
    k-=1;
    unsigned long long int i = 1, binary = 0;
    while(k > 0) {
        binary += (k % 2) * i*3;
        k = k / 2;
        i *= 10;
    }
 
    cout <<binary;
   system("pause");
   return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2019, 20:31

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

Циклы: проверить, содержит ли заданное четырехзначное число три одинаковые цифры
Ввести на форму целое четырехразрядное положительное число. Проверить содержит ли заданное число...

Дано число n. Верно ли, что это число содержит ровно 3 одинаковых цифры
Помогите пожалуйста с решением очень надо.))) С++ Добавлено через 44 минуты Парни выручайте......

Дано натуральное n-значное число P. Верно ли что число содержит три одинаковые цифры.
Люди помогите - нужно програмку написать с помощью процедур и функций - собственно вот: Дано...

Проверить является ли число палиндромом, содержит ли одинаковые цифры, или все различные.
Помогите сделать код на С++ Дано натуральное число n (0 &lt; n &lt; 9990). а) является ли это число...

Найти сумму цифр числа, кратных 3 и проверить, содержит ли число четные цифры
Помогите найти ошибку в програмке Дано натуральное число(более четырех знаков): –найти сумму...


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

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

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