Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andre0111

Dicas para melhor algoritmo--> números divisíveis por 2 e por 3

Recommended Posts

Pessoal,

Fiz esse algoritmo em C para receber 4 números inteiros e dizer quais são divisíveis por 2 e por 3. Algo simples, porém tem um detalhe.

Eu preciso que quando somente 1 número atenda essa condição, apareça apenas "O número tal é divisível por 2 e por 3" e quando for mais de 1 número, apareça:

"Os números divisíveis por 2 e por 3 são:

tal

tal

tal

..."

Eu consegui fazer isso, porém acho que deve existir uma forma mais simples de conseguir a mesma solução. Alguém conhece algo melhor para se fazer nesse caso?

Segue o código:

#include<stdlib.h>
#include<stdio.h>
#include<locale.h>
#include<conio.h>

//Algoritmo_divisivel_2_e_3

//var
int a,b,c,d,i=0,s=0;

main(){
	//locale
	setlocale(LC_ALL,"Portuguese");
	//input && processing && output
	printf("Informe 4 números inteiros: ");
	scanf("%d %d %d %d",&a,&b,&c,&d);
	
	printf("\n");
	
	
	if((a%2==0)&&(a%3==0) || (b%2==0)&&(b%3==0) || (c%2==0)&&(c%3==0) || (d%2==0)&&(d%3==0)){
		
		if((a%2==0)&&(a%3==0)){
			i=1; //i==> contador para uso do singular (O número %d é divisível por 2 e por 3)
			s=s+i; //s==> acumulador para uso do plural (Os números divisíveis por 2 e por 3 são:)
		}
		
		if((b%2==0)&&(b%3==0)){
			i=2;
			s=s+i;
		}	
		
		if((c%2==0)&&(c%3==0)){
			i=10;
			s=s+i;
		}	
		
		if((d%2==0)&&(d%3==0)){
			i=14;
			s=s+i;
		}	
	}
	
	else{
		printf("Nenhum dos números informados é divisível por 2 e por 3");
	}
	
	
	if((s==1) || (s==2) || (s==10) || (s==14)){
		
		if(i==1){
			printf("O número %d é divisível por 2 e por 3",a);	
		}
		if(i==2){
			printf("O número %d é divisível por 2 e por 3",b);	
		}
		if(i==10){
			printf("O número %d é divisível por 2 e por 3",c);	
		}
		if(i==14){
			printf("O número %d é divisível por 2 e por 3",d);	
		}	
	}
	else if((s==3) || (s==11) || (s==12) || (s==13) || (s>14)){
		
			//s==3 --> a e b / s==11--> a e c / s==12--> b e c / s==13--> a,b e c
			//s>14--> todas as outras combinações
			
			printf("Os números divisíveis por 2 e por 3 são: \n");
			if((a%2==0)&&(a%3==0)){
				printf("%d \n",a);
			}
			
			if((b%2==0)&&(b%3==0)){
				printf("%d \n",b);
			}	
			
			if((c%2==0)&&(c%3==0)){
				printf("%d \n",c);
			}	
			
			if((d%2==0)&&(d%3==0)){
				printf("%d \n",d);
			}		
		}	
	getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui melhorar o código, mas ainda acho que deve ter outra forma de fazer isso.

#include<stdlib.h>
#include<stdio.h>
#include<locale.h>
#include<conio.h>

//Divisível por 2 e por 3

//var
int a,b,c,d,i=0,ii=0,s=0,x,y,z,e,f;
main(){
	//locale
	setlocale(LC_ALL,"Portuguese");
	
	//input && processing && output
	printf("Informe 4 números inteiros para saber quais deles são divisíveis por 2 por 3: ");
	scanf("%d %d %d %d",&a,&b,&c,&d);
	
	
	if((a%2==0)&&(a%3==0) || (b%2==0)&&(b%3==0) || (c%2==0)&&(c%3==0) || (d%2==0)&&(d%3==0)){
		if((a%2==0)&&(a%3==0)){
			i=1;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		if((b%2==0)&&(b%3==0)){
			i=2;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		if((c%2==0)&&(c%3==0)){
			i=10;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		if((d%2==0)&&(d%3==0)){
			i=14;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		
	}
	else{
		printf("Nenhum dos números informados é divisível por 2 e por 3");
	}
	
	
	if((s!=0)&&(i!=0)){
	
		if((s==i)){ //apenas 1 dos números é divisível por 2 e por 3
			if((a%2==0)&&(a%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",a);
			}
			if((b%2==0)&&(b%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",b);
			}
			if((c%2==0)&&(c%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",c);
			}
			if((d%2==0)&&(d%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",d);
			}
		
		}
		else{
			if((a%2==0)&&(a%3==0)){
				if((a==b)||(a==c)||(a==d)){
					x=1;
				}else{//(a!=b)&&(a!=c)&&(a!=d)
					y=1;
				}
			}
			if((b%2==0)&&(b%3==0)){ 
				if(b==a){
					x=1;
				}
				if(b==c){
					x=2;
				}
				if(b==d){
					x=10;
				}
				if((b!=a)&&(b!=c)&&(b!=d)){
					z=1;
				}
			}
			if((c%2==0)&&(c%3==0)){
				if(c==a){
					x=1;
				}
				if(c==b){
					x=2;
				}
				if(c==d){
					x=14;
				}
				if((c!=a)&&(c!=b)&&(c!=d)){
					e=1;
				}
			}
			if((d%2==0)&&(d%3==0)){
				if(d==a){
					x=1;
				}
				if(d==b){
					x=10;
				}
				if(d==c){
					x=14;
				}
				if((d!=a)&&(d!=b)&&(d!=c)){
					f=1;
				}
			}	
			if((x==1)||(y==1)){
				ii++;
			}
			if((x==2)||(z==1)){
				ii++;
			}
			if((x==14)||(e==1)){
				ii++;
			}
			if((f==1)||(x==10)){
				ii++;
			}
			
			if(ii==1){
				printf("O número divisível por 2 e por 3 é: \n");
			}else if(ii>1){
				printf("Os números divisíveis por 2 e por 3 são: \n");
			}
			
			if((x==1)||(y==1)){
				printf("%d \n",a);
			}
			if((x==2)||(z==1)){
				printf("%d \n",b);
			}
			if((x==14)||(e==1)){
				printf("%d \n",c);
			}
			if((f==1)||(x==10)){
				printf("%d \n",d);
			}
		}			
	}	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 25/09/2016 at 18:45, Andre0111 disse:

Consegui melhorar o código, mas ainda acho que deve ter outra forma de fazer isso.

 

Tem. Segue abaixo:

int verifica(int *variavel, int *bandeira){
  if((((*variavel)%2)==0)&&(((*variavel)%3)==0))
    *bandeira=1;
  else
    *bandeira=0;
}

int main(){
  int a,b,c,d,bandeiraa,bandeirab,bandeirac,bandeirad,conta_bandeiras=0;
  printf("Informe 4 numeros:");
  scanf("%d%d%d%d",&a,&b,&c,&d);
  verifica(&a,&bandeiraa);
  verifica(&b,&bandeirab);
  verifica(&c,&bandeirac);
  verifica(&d,&bandeirad);
  if(bandeiraa)
    conta_bandeiras++;  
  if(bandeirab)
    conta_bandeiras++;
  if(bandeirac)
    conta_bandeiras++;
  if(bandeirad)
    conta_bandeiras++;
  if(conta_bandeiras==1){
    printf("O numero ");
    if(bandeiraa)
      printf("%d",a);
    else if(bandeirab)
      printf("%d",b);
    else if(bandeirac)
      printf("%d",c);
    else if(bandeirad)
      printf("%d",d);  
    printf(" e divisivel por 2 e por 3.");
  }
  else if(conta_bandeiras>1){
    printf("Os numeros divisiveis por 2 e por 3 sao:\n");
    if(bandeiraa)
      printf("%d\n",a);
    if(bandeirab)
      printf("%d\n",b);
    if(bandeirac)
      printf("%d\n",c);
    if(bandeirad)
      printf("%d\n",d);      
  }
  system("pause");    
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.