Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202

Задача перебора возможных значений для 3-х в 8-й степени

24.08.2021, 16:32. Показов 4158. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует 8 int переменных - int arr[8].
Каждая переменная может принимать только 3 значения: 0, 1, 2
Как перебрать все допустимые варианты? Не могу сообразить.
Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2021, 16:32
Ответы с готовыми решениями:

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

Доказать (путем перебора возможных значений)
Доказать (путем перебора возможных значений), что для любых вели-чин A, B, C типа Boolean следующие пары логических выражений имеют...

Доказать (путем перебора возможных значений), что для любых величин а, b, с типа boolean следующие пары логических выражений имеют одинаковые значения
Доказать (путем перебора возможных значений), что для любых величин а, b, с типа boolean следующие пары логических выражений имеют...

33
 Аватар для FFPowerMan
2154 / 1234 / 508
Регистрация: 11.10.2018
Сообщений: 6,233
24.08.2021, 16:36
Начинаем с 1 переменной
000
001
002
010
011
и т.д.
Понятно?

Добавлено через 1 минуту
Цитата Сообщение от Doctor123 Посмотреть сообщение
Существует 8 int переменных - int arr[8].
- Я не понял, это 1 число или это разные числа?
1
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202
24.08.2021, 16:40  [ТС]
FFPowerMan, Разные 8 переменных, в каждой из которых может быть либо ноль, 1 или цифра 2
Например: 1, 2, 1, 0, 0, 2, 2, 1
Но нужно перебрать все комбинации в оговоренном диапазоне.
0
 Аватар для FFPowerMan
2154 / 1234 / 508
Регистрация: 11.10.2018
Сообщений: 6,233
24.08.2021, 16:54
В чем проблема у Вас?
0
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202
24.08.2021, 16:59  [ТС]
FFPowerMan, Не могу придумать алгоритм для перебора всех значений в указанном диапазоне. Либо он сложный сам по себе, либо только для меня.
0
 Аватар для FFPowerMan
2154 / 1234 / 508
Регистрация: 11.10.2018
Сообщений: 6,233
24.08.2021, 17:15
Лучший ответ Сообщение было отмечено Doctor123 как решение

Решение

Вроде получилось щас. Проверяйте.
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
#include <iostream>
using namespace std;
 
int main()
{
    bool StopFlag = false;
    int arr[8] = {0}, c, n;
    
    //Print
    for(n = 0; n < 8; n++)
        cout << arr[n];
    cout << '\n';
    
    while(!StopFlag)
    {
        //+1
        arr[7]++;
        
        for(n = 7; n > 0; n--)
        {
            c = arr[n];
            arr[n] = c%3;
            arr[n-1] += c/3;
        }
        
        //Print
        for(n = 0; n < 8; n++)
            cout << arr[n];
        cout << '\n';
        
        //StopFlag
        StopFlag = true;
        for(n = 0; n < 8; n++)
            if(arr[n] != 2)
            {
                StopFlag = false;
                break;
            }
    }
    
    return 0;
}
1
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202
24.08.2021, 17:19  [ТС]
Круто! Спасибо!
Миниатюры
Задача перебора возможных значений для 3-х в 8-й степени  
0
Заблокирован
24.08.2021, 17:46
Добавлено через 5 минут
Doctor123, получается "троичная система счисления"
я такое писал уже, для N--ой
простая перестановка
2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
24.08.2021, 23:46
Цитата Сообщение от Doctor123 Посмотреть сообщение
Существует 8 int переменных - int arr[8].
Каждая переменная может принимать только 3 значения: 0, 1, 2
Как перебрать все допустимые варианты? Не могу сообразить.
Просто взять и написать 8 вложенных циклов. Готово. В чем проблема?
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,260
25.08.2021, 02:18
На Qt не нужно?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
QString to_3_cod(int x)
{
    int i = 7;
    QString str = "00000000";
 
    while(x > 0)
    {
        str[i] = '0' + (x % 3);
        x /= 3;
        i--;
    }
 
    return str;
}
 
 
 
void Widget::press_pbtn_01()
{
    for(int i = 0; i < 6561; i++)
    {
        ui->textEdit->append(to_3_cod(i));
    }
}
Миниатюры
Задача перебора возможных значений для 3-х в 8-й степени  
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,679
Записей в блоге: 14
25.08.2021, 09:13
Для любого n (длина) и r (основание):

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>
using namespace std;
 
int main()
{
    int n,r,i;
    cout << "n=";
    cin >> n;
    cout << "r=";
    cin >> r;
    int x[n]={0};
    while(1)
    {
        for (i=0; i<n; i++) cout << x[i] << " ";
        cout << endl;
        i=0;
        while (1)
        {
            if (x[i]<r-1)
            {
                x[i]++;
                break;
            }
            x[i++]=0;
            if (i>=n) break;
        }
        if (i>=n) break;
    }
 
    return 0;
}
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Просто взять и написать 8 вложенных циклов. Готово. В чем проблема?
- Вы меня прямо разочаровываете... А если бы нужно было не 8, а 28?
1
 Аватар для COKPOWEHEU
4078 / 2676 / 432
Регистрация: 09.09.2017
Сообщений: 11,887
25.08.2021, 09:24
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Просто взять и написать 8 вложенных циклов. Готово. В чем проблема?
Выглядеть будет ужасно и масштабироваться плохо. Чем вас не устроило обычное длинное сложение или преобразование в троичную систему в самом конце?
C
1
2
3
4
5
6
7
8
9
  for(int i=0; i<6560; i++){
    arr[0]++;
    for(int j=0; j<8; j++){
      if(arr[j] > 2){
        arr[j] = 0;
        arr[j+1]++;
      }else break;
    }
  }
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 <stdio.h>
 
void numtoch(char *ch){
  if(*ch >= 0 && *ch <= 9){
    *ch += '0';
  }else{
    *ch += 'A'-0x0A;
  }
}
char* itostr(char *buf, int size, int val, int base){
  char *res = &buf[size-2];
  res[1] = 0;
  res[0] = val % base;
  numtoch( &res[0] );
  val /= base;
  while(val > 0){
    res--;
    res[0] = val % base;
    numtoch( &res[0] );
    val /= base;
  }
  return res;
}
 
int main(){
  int val = 0;
  char buf[20];
  for(int i=0; i<6561; i++){
    printf("%s\n", itostr(buf, 20, i, 3));
  }
}
2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
25.08.2021, 09:41
Цитата Сообщение от Catstail Посмотреть сообщение
Вы меня прямо разочаровываете... А если бы нужно было не 8, а 28?
Такие задачи нежно решать по принципу "каков вопрос - таков и ответ". А не заниматься додумыванием на тему "а если бы".

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

Цитата Сообщение от Catstail Посмотреть сообщение
Для любого n (длина) и r (основание):
C++
1
2
3
cin >> n;
...
int x[n]={0};
Сразу ошибка компиляции.

Во-первых, ни о каком int x[n] в С++ не может быть и речи. Во-вторых, даже в С++-подобных суржиках, разрешающих такое int x[n], все равно запрещено ={0}. Ведь сколько уже говорим об этом - все впустую...

---

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Выглядеть будет ужасно
Это лишь вопрос грамотного оформления.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
и масштабироваться плохо
См. выше. Масштабироваться оно будет так, как нужно. Но как нужно - в постановке задачи не сказано. Поэтому и вопроса такого нет.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Чем вас не устроило обычное длинное сложение или преобразование в троичную систему в самом конце?
Тем, что не нужно переусложнять задачу без необходимости.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
char* itostr(char *buf, int size, int val, int base){
В С++ есть std::to_chars.
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
25.08.2021, 09:46
итого 38=6561 значений(комбинаций)
проконтролировать все сможешь?
вот решение в лоб
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<6561;i++)
{
int tmp=i;
  for(int j=7;j>=0;j++)
  {
  arr[j]=tmp%3;
  tmp/=3;
  }
}
1
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
25.08.2021, 11:17
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 <algorithm>
using namespace std;
 
int main(){
   int a=0, count=0;
 
   while(count<6561){
      string s;
      int n=a;
      while(n){
         s+=n%3+'0';
         n/=3;
      }
      string t(8-s.length(),'0');
      s+=t;
      reverse(s.begin(),s.end());
      cout<<s<<"\n";
      a++;
      count++;
  }
  return 0;
}
1
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202
25.08.2021, 12:12  [ТС]
повар1, Смог запустить Ваш код. - Работает, спасибо!
Миниатюры
Задача перебора возможных значений для 3-х в 8-й степени  
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
25.08.2021, 12:18
Doctor123, в коде можно переменную 'a' убрать и вместо нее поставить count;
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
25.08.2021, 12:22
еще один вариант
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<8;i++)
 {
  for(int j=0;j<3;j++)
     arr[i]=j;
 
  for(int k=0;k<8;k++) // цикл вывода на экран
     cout<<arr[k];
   cout<<endl;
 
}
Добавлено через 1 минуту
повар1, а на кой ляд ты строку создаешь в условии написано
Цитата Сообщение от Doctor123 Посмотреть сообщение
Существует 8 int переменных - int arr[8].
1
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202
25.08.2021, 12:26  [ТС]
COKPOWEHEU, И Ваше решение работает! Мне есть над чем поразмыслить.
Миниатюры
Задача перебора возможных значений для 3-х в 8-й степени  
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
25.08.2021, 12:39
ValeryS, строку преобразовать в
Цитата Сообщение от ValeryS Посмотреть сообщение
8 int переменных - int arr[8].
не очень сложно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.08.2021, 12:39
Помогаю со студенческими работами здесь

Доказать (путем перебора возможных значений), что для любых величин А, В, С типа Boolean следующие пары логических выражений имеют одинаковые значения
Доказать (путем перебора возможных значений), что для любых величин А, В, С типа Boolean следующие пары логических выражений имеют...

Доказать (путем перебора возможных значений), что для любых величин A, B, C типа Boolean следующие пары логических выражений имеют одинаковые значения
Доказать (путем перебора возможных значений), что для любых величин A, B, C типа Boolean следующие пары логических выражений имеют...

Доказать (путем перебора возможных значений), что для любых величин А, В, С типа Boolean следующие пары логических выражений имеют одинаковые значения
Доказать (путем перебора возможных значений), что для любых величин А, В, С типа Boolean следующие пары логических выражений имеют...

доказать(путем перебора возможных значений), что для любых величин А,В,С типа boolean следующие пары логических выражений имеют одинаковые значения(эк
доказать(путем перебора возможных значений), что для любых величин А,В,С типа boolean следующие пары логических выражений имеют одинаковые...

Доказать(путём перебора возможных значений), что для любых величин типа boolean слудующие пары логических выражений имеют одинаковые значения
Помогите пожалуйста решить задачку на DELPHI, тип boolean. Собственно задача: Доказать(путём перебора возможных значений), что для любых...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru