Получить возможные комбинации чисел из трёх двоичных чисел - C (СИ)

Узнай цену своей работы

Формулировка задачи:

вожу три числа через пробел 22 56 34 , соответственно надо получить 225634, 223456, 345622, 342256, 562234, 563422 сделал программу поиском через mod и div , конечно работает не правильно , подскажите где ошибки
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
 
int main ()
{  
    int a,b,c,i;
   printf(" Enter 3 double numbers\n");
   scanf("%2d" "%2d" "%2d", &a, &b, &c);
   while ((a<100)&&(b<100)&&(c<100)&&(a>9)&&(b>9)&&(c>9))
 {
   for (i=100000 ; i<1000000; i++)
   { 
       if (((a=i%100)||(a=i/10000)||(a=((i%10000)/100))&&
        ((b=i%100)||(b=i/10000)||(b=((i%10000)/100))&&
        ((c=i%100)||(c=i/10000)||(c=((i%10000)/100))))))
       {
           printf ("%d\n",i);  
       }
  } 
   }
    return 0;
}
разобрался спасибо " == " и убрать "while ((a<100)&&(b<100)&&(c<100)&&(a>9)&&(b>9)&&(c>9))"
#include "stdafx.h"
#include <stdio.h>

int main ()
{  
    int a,b,c,i;
 
    printf(" Enter 3 double numbers\n");
scanf("%d" "%d" "%d", &a, &b, &c);
 
   for (i=100000 ; i<1000000; i++)
   { 
       if (((a==i%100)||(a==i/10000)||(a==((i%10000)/100)))&&
       ((b==i%100)||(b==i/10000)||(b==((i%10000)/100)))&&
        ((c==i%100)||(c==i/10000)||(c==((i%10000)/100))))
      {
           printf ("%d\n",i);  
      }
  } 
    return 0;
}

Решение задачи: «Получить возможные комбинации чисел из трёх двоичных чисел»

textual
Листинг программы
//gcc 5.4.0
 
#include <stdio.h>
#include <string.h>
 
#define N 3
typedef int T;
 
void arr_print(T *arr, size_t size) {
    for (size_t i = 0; i<size; i++)
        printf("%d", arr[i]); //
    putchar('\n');
}
 
void swap(T *x, T *y)
{
    T temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
 
void permute(T *a, int l, int r)
{
   if (l == r) {
     arr_print(a, r+1); //
   } else {
       for (size_t i = l; i <= r; i++) {
          swap((a+l), (a+i));
          permute(a, l+1, r);
          swap((a+l), (a+i));
       }
   }
}
 
int main(void)
{
    T arr[N] = {22, 56, 34};
    
    permute(arr, 0, N-1);
    
    return 0;
}

Объяснение кода листинга программы

В этом коде на языке C реализуется функция, которая выводит все возможные перестановки трёх чисел: 22, 56, 34. Обратите внимание на следующие элементы кода:

  1. #include и #include — эти строки подключают необходимые для работы функции файлы.
  2. #define N 3 — эта строка определяет количество чисел, для которых нужно найти все возможные перестановки.
  3. typedef int T; — здесь определяется тип данных переменной, с которой будет работать функция.
  4. *void arr_print(T arr, size_t size) {** — это функция для вывода чисел на экран.
  5. void swap(T x, T y) — эта функция меняет местами два числа.
  6. *void permute(T a, int l, int r)** — это рекурсивная функция, которая генерирует все возможные перестановки чисел.
  7. int main(void) — это точка входа в программу.
  8. T arr[N] = {22, 56, 34}; — это массив, в котором хранятся числа, для которых нужно найти все перестановки.
  9. permute(arr, 0, N-1); — это вызов функции permute для массива arr с первым элементом 0 и последним элементом N-1.
  10. return 0; — это завершение работы программы. Таким образом, код генерирует все возможные перестановки чисел 22, 56, 34 и выводит их на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы