Lucas Fantin Postado Abril 19, 2016 Denunciar Share Postado Abril 19, 2016 Não consigo encontrar uma solução para esse problema. Alguém pode me ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aristóteles Postado Abril 19, 2016 Denunciar Share Postado Abril 19, 2016 Entendi o algoritimo, mas para te ajudar preciso saber se é em C ou C++ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lucas Fantin Postado Abril 19, 2016 Autor Denunciar Share Postado Abril 19, 2016 10 minutos atrás, Aristóteles disse: Entendi o algoritimo, mas para te ajudar preciso saber se é em C ou C++ É em C Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aristóteles Postado Abril 20, 2016 Denunciar Share Postado Abril 20, 2016 Gostei desse algoritmo aí, vou ajudar com o que eu consegui: Primeiramente, a cada andar que a pirâmide decresce (isso mesmo, é bem mais didático calcular de cima para baixo) existe um padrão de incremento de blocos: 1 3 5 7... (((1+3)+5)+7) ... Essa é a primeira coisa a se observar. A partir desse padrão o problema se resolve. Vamos ao que interessa, o código: #include <stdio.h> #include <stdlib.h> typedef struct Piramide { int qtpedras, andares, altura; } Piramide; int main () { Piramide p; int i, pedras_totais, pedras_sobraram, guarda_padrao, soma_padrao; do { printf ("Entre com a quantidade de pedras ~MAIOR do que 5~ : "); scanf ("%d", &pedras_totais); }while (pedras_totais<=5); /*Atribuindo valores que não atrapalharão o calculo. */ guarda_padrao=1, soma_padrao=1, p.andares=0, p.qtpedras=0; for (i=1; soma_padrao<pedras_totais; i++) { p.andares+=1; /* Aqui o padrão é somado a quantidade anterior de blocos, como no padrão, o anterior é incrementado com o posterior*/ guarda_padrao = ((i*2)+1); soma_padrao += guarda_padrao; if (soma_padrao > pedras_totais) { break; } else { p.qtpedras = soma_padrao; } } pedras_sobraram = pedras_totais - p.qtpedras; printf ("\nEssa piramide tem:\n"); printf ("\nAndares+terreo: %d", p.andares); printf ("\nAltura: %f metros\n", p.andares*1.5); if (pedras_totais == p.qtpedras) { printf ("não sobraram pedras!\n"); } else printf ("Sobraram %d pedras...\n", pedras_sobraram); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aristóteles Postado Abril 20, 2016 Denunciar Share Postado Abril 20, 2016 Apenas esse for precisa ser concertado para a contagem correta dos blocos, precisando de uma nova int para somar os blocos: for (i=1; soma_padrao<pedras_totais; i++) { p.andares++; /* Aqui o padrão é somado a quantidade anterior de blocos, como no padrão, o anterior é incrementado com o posterior*/ guarda_padrao = (i+(i+1)); soma_padrao = soma_padrao+guarda_padrao; padrao_bruto += soma_padrao; printf ("%d-", padrao_bruto); if (padrao_bruto > pedras_totais) { break; } else { p.qtpedras = padrao_bruto; } } Fui Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lucas Fantin Postado Abril 20, 2016 Autor Denunciar Share Postado Abril 20, 2016 Valeu pela ajuda, foi muito boa!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Lucas Fantin
Não consigo encontrar uma solução para esse problema. Alguém pode me ajudar?
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.