Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Love-Love
6 / 6 / 0
Регистрация: 27.10.2012
Сообщений: 94
#1

Выведите на экран все четырехразрядные числа, в записи которых нет одинаковых цифр

27.10.2012, 22:41. Просмотров 2148. Ответов 11
Метки нет (Все метки)

Помогите написать код,очень Вас прошу..
вот условие: Выведите на экран все четырехразрядные числа, в записи которых нет одинаковых цифр.
Заранее ОЧЕНЬ благодарю всех,кто сможет хоть чем-то мне помочь!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 22:41
Ответы с готовыми решениями:

Вывести все четырехзначные числа в записи которых нет двух одинаковых цифр
Вывести все четырехзначные числа в записи которых нет двух одинаковых цифр....

Вывести все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр.
Вот, собственно и условие: Вывести все четырехзначные числа, в десятичной...

Найти все натуральные числа в диапазоне между m и n, в записи которых нет двух одинаковых цифр
Всем привет. Найти все натуральные числа в диапазоне между m и n (m<n), в...

Циклы: напечатать в убывающем порядке все трехзначные числа, в записи которых нет одинаковых цифр
С++ Не понимаю как напечатать в убывающем порядке все трехзначные числа, в...

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

11
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,177
Записей в блоге: 1
27.10.2012, 22:47 #2
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(){
  int i, j, k, t;
  for (i=1; i<=9; i++)
    for (j=0; j<=9; j++)
      for (k=0; k<=9; k++)
        for (t=0; t<=9; t++)
          if ((i!=j)&&(i!=k)&&(i!=t)&&(j!=k)&&(j!=t)&&(k!=t))
            printf ("%d%d%d%d, ", i, j, k, t);
  return 0;
}
самое простое, что может придти в голову.
Но тут можно ещё подумать, как отсечь заранее неверные варианты, например
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(){
  int i, j, k, t;
  for (i=1; i<=9; i++)
    for (j=0; j<=9; j++)
      for (k=0; (k<=9)&&(i!=j); k++)
        for (t=0; (t<=9)&&(i!=k)&&(j!=k); t++)
          if ((i!=t)&&(j!=t)&&(k!=t))
            printf ("%d%d%d%d, ", i, j, k, t);
  return 0;
}
2
Love-Love
6 / 6 / 0
Регистрация: 27.10.2012
Сообщений: 94
27.10.2012, 23:00  [ТС] #3
ОГРОМНЕЙШЕЕ ВАМ СПАСИБО"!"""!!!!! сейчас сяду проверять

Добавлено через 6 минут
Все отлично!!
Спасибо Вам еще раз! Вы меня очень выручили!!!

а можно вопрос по уже сделанному?
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.10.2012, 09:54 #4
Лучший ответ Сообщение было отмечено как решение

Решение

Универсальный вариант, работающий с любыми натуральными числами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
 
bool Check(unsigned long a)
{
   int count[10] = {0};
   while(++count[a%10] < 2 && (a /= 10))
      ;
   return !a;
}
 
int main()
{
   int i;
   for(i = 1000; i < 10000; i++)
      if (Check(i))
         std::cout << i << "\n";
   return 0;
}
3
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,177
Записей в блоге: 1
28.10.2012, 13:35 #5
Цитата Сообщение от Thinker Посмотреть сообщение
bool Check(unsigned long a)
{
* *int count[10] = {0};
* *while(++count[a%10] < 2 && (a /= 10))
* * * ;
* *return !a;
}
жесть какая! И чё тут происходит? Тут a вообще не изменяется, а потом резульат, равныё а возвращают.
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
28.10.2012, 14:05 #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Тут a вообще не изменяется
А это:
a /= 10
По сути, здесь уже получается мини-хеш-таблица, т.к. адресация идет по остатку от деления элемента.
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.10.2012, 15:31 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
жесть какая! И чё тут происходит? Тут a вообще не изменяется, а потом резульат, равныё а возвращают.

Не по теме:

хорошо, выведите все 7-значные числа с разными цифрами. будете 7 циклов писать? а сделайте проверку, все ли цифры 100-значного числа в 500-ричной системе счисления различны)))

1
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,177
Записей в блоге: 1
28.10.2012, 16:18 #8
Цитата Сообщение от Thinker Посмотреть сообщение
Не по теме:
хорошо, выведите все 7-значные числа с разными цифрами. будете 7 циклов писать? а сделайте проверку, все ли цифры 100-значного числа в 500-ричной системе счисления различны)))
Во-первых, да, я стормозил, не заметил в твоём цикле "(a /= 10)".
Во-вторых, в моих циклах перебирается меньше, чем 8999 вариантов, т.е. теоретически работает быстрее.
1
Байт
Эксперт C
18096 / 11949 / 2483
Регистрация: 24.12.2010
Сообщений: 24,070
28.10.2012, 16:27 #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
теоретически работает быстрее.
Если уж мы взялись оптимизировать...
C
1
 for(i=1234; i<=9876; i++)
1
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.10.2012, 16:32 #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в моих циклах перебирается меньше, чем 8999 вариантов, т.е. теоретически работает быстрее.
никто не спорит про быстроту. вопрос был в универсальности. а по поводу быстроты, то можно сгенерировать все требуемые числа без одной проверки, то есть будет еще быстрее))
1
Байт
Эксперт C
18096 / 11949 / 2483
Регистрация: 24.12.2010
Сообщений: 24,070
28.10.2012, 16:50 #11
Цитата Сообщение от Thinker Посмотреть сообщение
можно сгенерировать все требуемые числа
Верно! Сгененировать все 4! = 24 перестановок (для данной задачи их можно хранить в памяти), потом C410 сочетаний, к каждому из них применить эти 24 перестановки, и дело в шляпе!
Одна проверочка все-таки нужна, чтоб на первом месте не вылез 0
2
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.10.2012, 16:55 #12
Байт, Вы верно поняли, через перестановки. С 0 можно отдельно, без проверок, то есть сначала все числа, где его нет, а затем все числа с 0,
то есть зафиксировали 0 на 2 позиции и крутим перестановки остальных цифр, затем 0 на третей позиции и т.д.
1
28.10.2012, 16:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 16:55

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

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

Найти все натуральные числа в диапазоне между m и n (m<n), в записи которых нет двух одинаковых цифр. Подсчитать количество таких чисел.
Найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых...


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

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

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