Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 1
Регистрация: 08.01.2015
Сообщений: 67
1

Найти все десятизначные числа с неповторяющимися цифрами

12.02.2015, 10:49. Показов 6119. Ответов 53
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++ - Найти все десятизначные числа с неповторяющимися цифрами
без массивов если можно ,просто циклами пожалуйста ,не могу решить (
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2015, 10:49
Ответы с готовыми решениями:

Найти все десятизначные числа с неповторяющимися цифрами, при делении которых на 9 получается симметричное частное
Здравствуйте, друзья. Вот задача: Найти все десятизначные числа с неповторяющимися цифрами, при...

Найти количество чисел в отрезке [Q;S] с неповторяющимися цифрами
Даны целые числа Q и S; 1<=Q<=S<=100,000,000 Нужно найти в диапазоне все числа, у которых цифры...

Показать на экран все десятизначные числа, цифры в которых не повторяются
Показать на экран все десятизначные числа, цифры в которых не повторяются. на языке c++

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

53
Эксперт по математике/физикеЭксперт С++
2046 / 1364 / 394
Регистрация: 16.05.2013
Сообщений: 3,501
Записей в блоге: 6
12.02.2015, 10:57 2
Предупреждаю таких чисел много... очень много:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <algorithm>
int main() {
    std::string mask = "0123456789";
    while (std::next_permutation(mask.begin(), mask.end()))
        if(*mask.begin() != '0')
            std::cout << mask << std::endl;
    return 0;
}
2
0 / 0 / 1
Регистрация: 08.01.2015
Сообщений: 67
12.02.2015, 11:02  [ТС] 3
а есть более простой метод ? просто я только начал изучение ,такого мы ещё не проходили
0
Ilot
12.02.2015, 11:10
  #4

Не по теме:

Антошка, Антошка, пойдём копать картошку,
Антошка, Антошка, пойдём копать картошку.

Тили-тили, трали-вали,
Это мы не проходили,
Это нам не задавали.
Па-рам-пам-пам
Па-рам-пам-пам

Антошка, Антошка, готовь к обеду ложку,
Антошка, Антошка, готовь к обеду ложку.

Тили-тили трали-вали,
Это, братцы, мне по силе,
Откажусь теперь едва ли.
Па-рам-пам-пам
Па-рам-пам-пам

0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.02.2015, 12:41 5
NEW_ID, поищи "генерация перестановок"
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2015, 09:49 6
Цитата Сообщение от Байт Посмотреть сообщение
поищи "генерация перестановок"
Не видишь связи?

Добавлено через 3 минуты
Цитата Сообщение от Ilot Посмотреть сообщение
Предупреждаю таких чисел много... очень много:
Ну, не так уж и много.
10! - 9! = 3265920
1
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
20.02.2015, 03:55 7
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 <iostream>
int main(){
    unsigned __int64 num, temp;
    int n;
    bool unmatch;
    for (unsigned __int64 i = 1234567890; i <= 9876543210; i++)
    {
        num = i;
        unmatch = true;
        do
        {
            temp = (num / 10);
            n = (num % 10);
            do{
                if (n == (temp % 10))
                {
                    unmatch = false;
                    break;
                }
                else temp /= 10;
            } while (temp > 0);
            if (!unmatch)
                break;
            else
                num /= 10;
        } 
        while (num > 0);
        if (unmatch)
            std::cout << i << std::endl;
    }
}
1
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.02.2015, 05:20 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
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
 
bool check(long n){
    bool q = 0, w = 0, e = 0, r = 0, t = 0, y = 0, u = 0, i = 0, o = 0, p = 0;
    while(n){
        switch(n%10){
            case 1: {if(q) return 0; q = 1; break; }
            case 2: {if(w) return 0; w = 1; break; }
            case 3: {if(e) return 0; e = 1; break; }
            case 4: {if(r) return 0; r = 1; break; }
            case 5: {if(t) return 0; t = 1; break; }
            case 6: {if(y) return 0; y = 1; break; }
            case 7: {if(u) return 0; u = 1; break; }
            case 8: {if(i) return 0; i = 1; break; }
            case 9: {if(o) return 0; o = 1; break; }
            case 0: {if(p) return 0; p = 1; break; }
        }
        n/=10;
    }
    return 1;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    for(long i = 1234567890; i<=9876543210; i++){
        if( check(i) ){
            std::cout << i << std::endl;
        }
    }
}
:P
2
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.02.2015, 11:05 9
UnsKneD, Ой, как тяжело! Для генерации всех перестановок есть значительно более интересные методы.
И для каждого разряда - отдельная переменная! А массивов, что, не существует?
И многоэтажный однообразный case там, где можно сделать простое арифметическое условие!
И начинать надо не с 1234567890, а с 1023456789
Вот ваш check
C++
1
2
3
4
5
6
7
8
9
10
bool check(long n)
{ bool q[10];
  for(int i=0; i<10; i++) q[i] = false;
  while(n) {
     if (q[n%10]) return false;
     q[n%10] = true;
     n /=10;
  }
  return true;
}
Однако, повторяю, ваш подход чрезвычайно не эффективен. Чтобы получить 3.266*106 чисел вы перебираете 9*109. Эффективность 0.03 %

Добавлено через 4 минуты
lawr, Почти все вышеизложенное относится и к вашему коду (кроме case).
В деталях вашего кода не разбирался, но есть большие сомнения, что он будет выдавать числа именно с разными цифрами. Попробуйте хотя бы на 3-х значных.

Добавлено через 10 минут
Ну, если все здесь такие ленивые, поработаю за вас...
Функция перестановки чисел. Алгоритм
http://cppalgo.blogspot.ru/2011/02/episode-1.html
http://lmgtfy.com/?q=%D0%B3%D0... 0%BE%D0%BA
0
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
20.02.2015, 11:56 10
Байт, вы не поверите, но таки выдает, и именно что с разными цифрами по поводу массивов- прочитайте пожалуйста пост: "без массивов если можно ,просто циклами пожалуйста". ну а за подсказку об ошибке - гран мерси
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
20.02.2015, 12:26 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
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<ctime>
#include<iostream>
using namespace std;
 
int getNumber()
{
return (rand()%3265919)+1;
}
 
void coutSequent(int start, int a=-1)//эту без параметра вызывать морока
{
if(a < 1)
if( a == -1 ) a = 3265920;
else
{
cout<<"nothing"<<endl;
return;
}
int lim = start+a;
for (int i=start; i < lim; ++i)
{
cout<<i<<" ";
if(i && !(i%23))cout<<endl;
}
}
 
int main()
{
srand((int)time(0));
int scoca=1;
cout<<"scoca? ";
cin>>scoca;
//это с возможностью повторений
for(int i=0; i < scoca; ++i)
{
cout<<getNumber()<<endl;
}
//чтобы повторений небыло нужен хотябы массив 
//или последовательно выводить:
coutSequent(5,6);
cin.get();
cin.get(); 
    return 0;
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.02.2015, 12:51 12
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
#include <stdio.h>
#define N 10
 
main()
{ char s[N+1], t; int i, j, r, k;
 
 //for(i=0; i<N; i++) s[i] = '0'+i;  // так попадут числа, начинающиеся с 0
 strcpy(s, "10");
 for(i=2; i<N; i++) s[i] = '0'+i;
 s[N] = '\0';
 
 while(1) {
   printf("%s\n", s);
       // Находим самое правое место, где s[i] < s[i+1]
   for(i=N-1; i>=0 && s[i] > s[i+1]; i--) ;
   if (i<0) break; // Уже получили "9876543210" - самую старшую перестановку
       // Находим s[j] - наименьший элемент справа от s[i] и больший его
   for(j=N-1; s[i] > s[j]; j--) ;
       // Меняем s[i] <-> s[j]
   t = s[j];
   s[j] = s[i];
   s[i] = t;
       // То, что за "i" - переворачиваем
   for(k=i+1, r=N-1; r > k; k++, r--) {
     t = s[r];
     s[r] = s[k];
     s[k] = t;
   }
 }
}
Пришлось использовать представление числа в виде массива s[N+1], так как транслятор, которым я пользовался, не поддерживает типа long long
Это классический алгоритм генерации перестановок в лексикографическом порядке

Добавлено через 1 минуту
IGPIGP, не понял, какое отношение имеет ваш код к данной задаче. И при чем тут rand? ИМХО, тут все детерминировано.
2
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
20.02.2015, 13:13 13
Цитата Сообщение от Байт Посмотреть сообщение
И при чем тут rand? ИМХО, тут все детерминировано.
Как сказал один благочестивый математик древности: -"Господь расположил натуральные числа одно за другим, чтобы легче их находить."
И кто скажет что он был не прав, в того я первый кину каменюку.
Во второй ф-ции без рандом. )
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.02.2015, 13:25 14

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Как сказал один благочестивый математик древности: -"Господь расположил натуральные числа одно за другим, чтобы легче их находить.
Не кидайте в меня камнями! Я согласен!
Но вот кто сказал - "Господь создал натуральные числа. Все остальное - дело рук человеческих". Он же? Или другой?



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
чтобы легче их находить
С другой стороны, он их создал столь много, что иногда и жизни не хватает, чтобы нужное найти...:)

0
IGPIGP
20.02.2015, 13:53
  #15

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Но вот кто сказал - "Господь создал натуральные числа. Все остальное - дело рук человеческих". Он же? Или другой?
Только если в реинкарнации. Великий Сагар Матха верил в её возможность, а Кронекер вряд ли.
Вы как представитель славного ордена братьев во Иже Е Си можете не знать, что название библиотеки Сmath, это полу аббревиатура С.Матха (C.Math). За что создателю (С++) отдельное спасибо. Вообще, обоим создателям по спасибу. Создателю С++ и создателю создателя С++. Вот же откуда два плюса после С... :scratch:
:)

0
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.02.2015, 15:19 16
Байт, причем тут эффективность, это просто ещё один способ решения задачи по индуски.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.02.2015, 15:28 17
Цитата Сообщение от UnsKneD Посмотреть сообщение
причем тут эффективность, это просто ещё один способ решения задачи по индуски.
Ну, если мы здесь будем соревноваться в неэффективности, то вы с lawr, вполне можете побороться за приз. Пока не пришел истинный ИНДУС.
А меня устраивает скромное третье место.
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
20.02.2015, 15:44 18
Цитата Сообщение от Байт Посмотреть сообщение
Пока не пришел истинный ИНДУС
Эффектизм это совместная сласть плюс ИНДУСтриализация всей вселенной.
Цитата Сообщение от Байт Посмотреть сообщение
А меня устраивает скромное третье место
Вот нашёл как раз:
В Си библиотека math.h тоже прославляет великого Сагара являя сокращение Матха Харе! Японцы относятся к этому сочетанию с подозрением. Создатель поступил полит-корректно, умеренно и благочестиво. К тому же, он трепетно относился к харе и понимал, что это Кришново и не стоит посвящать это всем.
А то дойдёт и до того, что каждой твари по харе.
Поэтому новая библиотека обрела новое название сочетающее первую букву имени и родовое имя великого математика.
1
0 / 0 / 1
Регистрация: 08.01.2015
Сообщений: 67
20.02.2015, 18:00  [ТС] 19
можно комментарии если не сложно)
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.02.2015, 18:26 20
Цитата Сообщение от NEW_ID Посмотреть сообщение
можно комментарии если не сложно)
1. Когда в теме несколько человек, следует уточнять, к кому обращаешься.
2. Если ко мне, то готов тебе рассказать историю про солдата. - "Бабуля, не дашь ли водицы напиться, а то так есть хочется, что даже ночевать негде"
1
20.02.2015, 18:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2015, 18:26
Помогаю со студенческими работами здесь

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

Квадрат трехзначного числа оканчивается тремя цифрами, которые как раз составляют взятое число. Найти все такие числа
Квадрат трехзначного числа оканчивается тремя цифрами, которые как раз составляют взятое число....

Найти все трехзначные числа, квадраты которых оканчиваются тремя цифрами
помогите написать программу в visual studio оператор for Найти: а) все трехзначные числа,...

Найти все трехзначные числа, квадраты которых оканчиваются тремя цифрами
Найти: а) все трехзначные числа, квадраты которых оканчиваются тремя цифрами, кото-рые и...


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

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