Jump to content

Ajuda com lógica de programa


usermanero
 Share

Recommended Posts

Para quaisquer inteiros positivos n e k, seja pk(n) a quantidade de combinações possíveis de representar o inteiro n

como uma soma de exatamente k inteiros positivos distintos, sem consider a ordem dessas parcelas. Por exemplo,

seja n = 12 e k = 3. O inteiro n = 12 pode ser expresso como uma soma de três inteiros positivos distintos de

sete formas diferentes, a saber:

1 + 2 + 9 = 1 + 3 + 8 = 1 + 4 + 7 = 1 + 5 + 6 = 2 + 3 + 7 = 2 + 4 + 6 = 3 + 4 + 5:

Assim, temos que p3(12) = 7.

A saída pode ser:

1 2 9

1 3 8

1 4 7

1 5 6

2 3 7

2 4 6

3 4 5

Consegui fazer até a parte 1 5 6 mas depois dessa parte não consigo mudar os números. Alguma ideia de como fazer, pelo menos uma ideia pra eu tentar desenvolver?

Link to comment
Share on other sites

#include <stdio.h>
#include <stdlib.h>
main(){

int n, k, total=0, I, J, Z, aux, aux1=0, aux2, aux3;


scanf("%d %d", &n, &k);

//tratamento de erro, n e k devem ser inteiros positivos e n deve ser maior que k
if(n>0 && k>0 && n<k){
printf("Erro");
}
else{
int vetor[k];
vetor[0]=1;


aux2 = k;
aux3= k-1;

//preenche o vetor com valores
for(I=1; I<k ;I++){
vetor[i]= vetor[i-1] + 1;
//printf("%d\n",vetor[i]);
}

//soma os valores do vetor até a penultima posição
for(I=0; I!=k-1;I++){
aux1 += vetor[i];
}

//atribui o valor da ultima posição e soma todos os valores armazenando em aux1
vetor[k-1] = n - aux1;
aux1 +=vetor[k-1];

//imprime primeiro valor
if(aux1==n){
for(Z=0; Z<k ;Z++){
    printf("%d ", vetor[Z]);
}
printf("\n");
}


//imprime valores restantes

aux2--; //aux2 = k-1
aux3--; //aux3 = k-2

//compara se a penultima posição é menor que a ultima, caso positivo, continua o loop atribuindo os valores eg
J=vetor[aux2];

for(I=vetor[aux3]; I<J; I++){
vetor[aux3]= vetor[aux3] + 1;
vetor[aux2]= vetor[aux2] - 1;
J--;

//imprime se o valor total(aux1) for igual ao valor de n
if(aux1==n){
for(Z=0; Z<k ;Z++){
    printf("%d ", vetor[Z]);
}
printf("\n");
}
}


}

return 0;
}

consegui isso mas acho que tem muita coisa errada ai

Edited by thoga31
GeSHi
Link to comment
Share on other sites

HappyHippyHippo

consegui isso mas acho que tem muita coisa errada ai

conseguir, não conseguiste, porque isso não dá o resultado pretendido.

onde retiraste a ideia de como resolver o problema ?

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Sei la, foi aparecendo na minha cabeça. Mas eu não faço a minima ideia de como resolver do jeito certo, queria uma ajuda nem que fosse só pra começar.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.