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