nandomaximo
(usa Debian)
Enviado em 24/08/2015 - 10:25h
bom estou programando , estou meio com problemas , se alguém pode me ajudar ai agradeço muito , bom vou explica o problema .
estou programando em c para fazer numero de possibilidade .
ex:..
eu escolho ter 4 numero
e depois escolho ter 3 numero para possibilidade
ele vai imprimir:
1,2,3
1,2,4
1,3,4
2,3,4
numero de possibilidade em ordem crescente
da um olhada, se ajuda .
#include <stdio.h>
#include <string.h>
/* Tamanho máximo da entrada */
#define MAX_INPUT 31
#define TAMANHO 1000
int main() {
unsigned MAX, MASK, NUM ;
int i, j, r, k,cta,aux ;
int nvetor[100];
cta = 0;
/* Armazena a string de entrada. */
char input[MAX_INPUT] ;
/* Armazena cada combinação. */
char str[MAX_INPUT] ;
printf("Digite o grupo inicial: ") ;
scanf("%s", input) ;
printf("Digite o r: ") ;
scanf("%d", &r) ;
/* Manda o bit 1 para a n-ésima posição.
* Os bits são invertidos para que a posição n
* esteja com o bit zero, a fim de marcar
* o final do processo.
*/
MAX = ~(1 << strlen(input)) ;
/* Primeiro número é o 1. */
NUM = 1;
putchar('\n') ;
/* Quando o número alcançar MAX, o loop
* será encerrado.
*/
while ( MAX & NUM ) {
/* Conta os bits 1's. */
MASK = 1 ;
k = 0 ;
while ( MAX & MASK ) {
if ( NUM & MASK ) k++ ;
MASK = MASK << 1 ;
}
/* Monta o resultado somente se
* a quantidade de bits k é igual
* a r. */
if ( k == r ) {
MASK = 1 ;
i = j = 0 ;
while ( MAX & MASK ) {
/* Verdadeiro se NUM tem um bit 1
* na posição indicada por MASK. */
if ( NUM & MASK ) {
/* Gera a combinação em str */
str[i] = input[j] ;
i++ ;
}
j++ ;
/* Desloca a máscara */
MASK = MASK << 1 ;
}
str[i]=0 ;
/*printf("%s\n", str) ;*/
nvetor[cta] = str; //aqui salvo os valores em um vetor para depois ordenar e mostrar
printf("= %s\n", nvetor[cta]) ;
cta++; // cta guarda a quantidade de elementos q foi gerado
}
NUM++ ;
}
//implementar um método de ordenação e mostrar os valores
return 0;
}