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

Найти все четырехзначные числа, у которых все цифры различны

01.04.2016, 10:34. Просмотров 1405. Ответов 5
Метки нет (Все метки)

Найти все четырехзначные числа, у которых все цифры различны.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2016, 10:34
Ответы с готовыми решениями:

Найти все четырехзначные числа, у которых все цифры различны
4)Найти все четырехзначные числа, у которых все цифры различны.

Вывести четырехзначные числа у которых все десятичные цифры различны
Я совсем зеленый новичок, все ли верно у меня в коде? Задача: вывести на экран числа от 1000 до...

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

Найти все четырёхзначные числа, у которых крайние цифры равны
Найти все четырёхзначные числа, у которых крайние цифры равны. С++

5
216 / 122 / 99
Регистрация: 14.03.2011
Сообщений: 626
01.04.2016, 17:08 2
если в лоб, то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int main()
{
for (int i=1000; i<9999; i++)
{
int a=i%10;
int b=(i/10)%10;
int c=((i/10)/10)%10;
int d=i/1000;
if ((a!=b)&&(a!=c)&&(a!=d)&&(b!=c)&&(b!=d)&&(c!=d)) {
cout.width(5);
cout<<i;
}
}
system("pause");
}
0
670 / 286 / 99
Регистрация: 04.07.2014
Сообщений: 802
01.04.2016, 19:13 3
Chertenok_n_13, сегодня так не интересно

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
65
66
67
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
 
class PermutationGenerator {
  int n;
  std::vector<int> p;
  std::vector<bool> used;
  std::string str;
  std::vector<std::string> result;
  void lex(int pos)
  {
    if (pos == n) {
      std::string res_str(n, ' ');
      for (int i = 0; i < n; i++)
        res_str[i] = str[p[i]];
      result.push_back(res_str);
      return;
    }
    for (int i = 0; i < n; i++) {
      if (!used[i]) {
        used[i] = true;
        p[pos] = i;
        lex(pos + 1);
        used[i] = false;
      }
    }
  }
 
public:
  std::vector<std::string> gen(std::string nums)
  {
    str = nums;
    n = str.size();
    p.resize(n);
    used.resize(n);
    result.clear();
    lex(0);
    return result;
  }
};
 
int main()
{
  PermutationGenerator perm;
  std::vector<std::string> result;
  result.reserve(1 * 2 * 3 * 4);
 
  std::string a(4, ' ');
  for (a[0] = '0'; a[0] <= '6'; ++a[0])
    for (a[1] = a[0] + 1; a[1] <= '7'; ++a[1])
      for (a[2] = a[1] + 1; a[2] <= '8'; ++a[2])
        for (a[3] = a[2] + 1; a[3] <= '9'; ++a[3]) {
          for (auto &&str : perm.gen(a)) {
            result.emplace_back(std::move(str));
          };
        }
 
  std::sort(result.begin(), result.end());
 
  for (auto &&str : result) {
    std::cout << str << std::endl;
  }
 
  return 0;
}
0
С чаем беда...
Эксперт CЭксперт С++
8260 / 4036 / 1110
Регистрация: 18.10.2014
Сообщений: 8,705
01.04.2016, 22:25 4
Цитата Сообщение от AlexVRud Посмотреть сообщение
сегодня так не интересно
Идея генерировать такие числа, вместо того, чтобы проверять существующие - правильная. Но 0123 не должно считаться четырехзначным числом. И непонятно зачем вы писали пермутатор руками. Сортировку-то вы взяли готовую.

В роли "странного" решения

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
#include <string>
#include <algorithm>
#include <iostream>
 
unsigned next_combination(unsigned x)
{
  unsigned u = x & -x;
  unsigned v = u + x;
  x = v  + (((v ^ x) / u) >> 2);
  return x;
}
 
int main()
{
  for (unsigned subset = (1u << 4) - 1; subset < (1u << 10); subset = next_combination(subset))
  {
    std::string r;
    
    for (unsigned bit = 1, i = '0'; bit < (1u << 10); bit <<= 1, ++i)
      if ((subset & bit) != 0)
        r += i;
    
    do
      if (r.front() != '0')
        std::cout << r << std::endl;
    while (std::next_permutation(r.begin(), r.end()));
  }
}
1
66 / 66 / 37
Регистрация: 26.10.2013
Сообщений: 198
02.04.2016, 02:53 5
Как у вас все сложно выходит - без поллитра никак не разобраться.

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 <iostream>
 
using namespace std;
 
void numbersGenerator(char mas[10], int pos, int left); 
 
void main() {
    char mas[10] = {'0','1','2','3','4','5','6','7','8','9'};
    numbersGenerator(mas, 0, 4);
}
 
void numbersGenerator(char mas[10], int pos, int left) {
    if (!left) {
        for(int i = 0; i < pos; i++) cout<<mas[i];
        cout<<' ';
        return;
    }
 
        if(pos) numbersGenerator(mas, pos + 1, left - 1);
 
    for(int i = pos; i < 10; i++) {
        int tmp = mas[pos];
        mas[pos] = mas[i];
        mas[i] = tmp;
        numbersGenerator(mas, pos + 1, left - 1);
        mas[i] = mas[pos];
        mas[pos] = tmp;
    }
    return;
}
Добавлено через 10 минут
Увы, не успел внести изменение:
Цитата Сообщение от RQdan Посмотреть сообщение
for(int i = pos; i < 10; i++) {
на
C++
1
for(int i = pos + 1; i < 10; i++) {
1
С чаем беда...
Эксперт CЭксперт С++
8260 / 4036 / 1110
Регистрация: 18.10.2014
Сообщений: 8,705
02.04.2016, 03:16 6
Цитата Сообщение от RQdan Посмотреть сообщение
Как у вас все сложно выходит - без поллитра никак не разобраться.
Для того и писалось. "Просто" было бы так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
  for (char d3 = '1'; d3 <= '9'; ++d3)
    for (char d2 = '0'; d2 <= '9'; ++d2)
      if (d2 != d3)
        for (char d1 = '0'; d1 <= '9'; ++d1)
          if (d1 != d2 && d1 != d3)
            for (char d0 = '0'; d0 <= '9'; ++d0)
              if (d0 != d1 && d0 != d2 && d0 != d3)
                std::cout << d3 << d2 << d1 << d0 << std::endl;
}
что безыдейно, скучно и уныло.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2016, 03:16

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

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

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

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

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


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

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

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