Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
v1tal1ty

Olimpiada em INETE. Querem tentar

Recommended Posts

v1tal1ty

Boas, ontem as 11 horas participei na olimpiada de minha escola INETE  de programação.

o exercicio que saio era o seguinte:

Contexto:

Chama se raiz digital de um numero inteiro positivo ao digito que resulta da soma dos digitos formam esse numero inteiro positivo.

Isto e , se a soma dos digitos de um numero inteiro resultar:

-Num numero formado por um unico digito, entao esse e a sua raiz digital.

-Num numero formado por mais de um digito, entao esses digitos tem que se somar ate que formam um so digito.

- tem que se inserir um '0' para determinar quando o processo para

exemplo:

intput:

3 - 4 - 11- 642 - 128 - 886 - 0

o processamento tem que ser:

3 é a sua raiz

4 nenhum

11 é 11

642  e  6+4+2= 12 ( 1+2= 3)  e 3 e o numero de raiz digital

128  é  1+2+8= 11 logo o 11 nao e um numero primo

886  é  8+8+6= 22( 2+2=4) logo nao tem :D

Eu nao consegui fazer o problema por razoes de nao saber utilizar arrays mas esperava que alguem daqui do forum consiguisse fazer isso ou pelo menos dar me umas dicas como fazelo  :down:

amanha vou inserir o  codigo para voces rirem um bocadinho dos meus ifs  ;)

cumps e boa programaçao

E aqui vem o  codigo :( apteceu me adiantar:

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


int MainMenu(void);
int opc = 0;

int main()
{
int num, num1, num2, num3, result = 0;
do{
	opc = MainMenu();
	switch(opc){
		case '1':
			puts("Introduza o numero que quer testar: \n\n");
			scanf_s("%d", &num);
			if(num == 2 || num== 3 || num==5 || num== 7)
				printf("O numero que introduzio tem como numero primo %d\n\n", num);
			else
				printf("O numero que introduzio nao tem numero primo \n\n");
		case '2':
			puts("Introduza o numero de maneira que cada digito fica separado por um espaço: \n\n");
			scanf_s("%d , %d", &num1, &num2);
			if(num1+ num2 < 10)
				num1+num2==result;
			if(result == 2 || result== 3 || result==5 || result== 7)
				printf("O numero que introduzio tem como numero primo %d\n\n", num);
			else
				printf("O numero que introduzio nao tem numero primo \n\n");

		case '3':
			puts("Introduza o numero de maneira que cada digito fica separado por um espaço: \n\n");
			scanf_s("%d , %d , %d", &num1, &num2 , &num3);
			num1+num2+num3==result;


			if(result== 2)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 3)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 5)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 7)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result == 11)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 13)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 17)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 19)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			if(result== 23)
				printf("O numero que introduzio tem como numero primo %d\n\n", result);
			else(result != 2,3,5,7,11,13,17,19,23)
				printf("O numero que introduzio nao tem raiz quadrada\n\n");
	};
}while(opc != 0);
   return 0;
}





int MainMenu(void)
{
   int opc = -1;

   puts("************** Main Menu **************");
   puts("Testamento de raiz digital do numero:");
   puts("  1 - Um numero com 1 digito?");
   puts("  2 - Um numero com 2 digitos?");
   puts("  3 - Um numero com 3 digitos?");
   puts("\n");
   puts("  0 - Terminar");
   puts("***************************************\n");
   printf("Indique a sua opção: ");
   fflush(stdin); 
   scanf_s("%d", &opc);
   if(opc > 0 || opc < 5)
      puts("--> Opcao invalida!");
   return opc;
}

Share this post


Link to post
Share on other sites
Peterv5

Fazer o exercício é contra as regras, tens de postar primeiro o que já fizeste para que te possamos ajudar em problemas com o código ou outras duvidas. Já agora aqui ninguém se vai rir com os Ifs, lolol. Mas pronto estou entusiasmado para ver que já fizeste para te podermos ajudar, boa sorte.

Share this post


Link to post
Share on other sites
JMC2010

O problema é sobre as raízes digitais de números inteiros. Referência: http://en.wikipedia.org/wiki/Digital_root

A variação pedida é verificar se no processo da determinação da raiz digital do número se chega a um número primo. Se assim for, o processamento pára e esse resultado é a "raiz digital prima" do número original.

Share this post


Link to post
Share on other sites
jarsantos

int main()
{
char c;
int *seq = NULL;
int tamSeq=0, num=0;
int count;

while(true)
{
	while(true)
	{
		c = getchar();

		if(isdigit(c))
		{
			if(num == 0 && c == '0') break;

			num = num*10 + atoi(&c);
		}
		else
			if(c == ' ')
			{
				tamSeq++;
				seq = (int *) realloc(seq, tamSeq*sizeof(int));
				seq[tamSeq-1] = num;
				num = 0;
			}
			else
			{
				printf("input invalido\n");
				system("PAUSE");
				return -1;
			}
	}

	for(int i = 0; i < tamSeq; i++)
	{
		num = seq[i];

		while(num > 9)
		{			
			count = 0;

			int a = log10((double) num);

			for(int j = pow((double) 10, a); j > 0; j = j/10)
			{
				count = count + (num / j);
				num = num % j;
			}

			num += count;
		}

		printf("A raiz digito de %i e - %i", seq[i], num);

		if(num == 2 || num == 3 || num == 5 ||  num == 7)
			printf(" - e primo\n");
		else
			printf("\n");
	}
	getchar();
	free(seq);
	seq = NULL;
	tamSeq = 0;
	num = 0;
}
}

tipo isto?

Share this post


Link to post
Share on other sites
TheDark

Fazer o exercício é contra as regras

Não é contra as regras fazer trabalhos. O que é contra as regras é pedir para fazerem um trabalho.

Dito isto, não é de todo a melhor forma de ajudar.

tipo isto?

...


Desaparecido.

Share this post


Link to post
Share on other sites
jarsantos

Segundo percebi as olimpiadas já terminaram e a pessoa que criou o tópico já resolveu o problema, portanto não vi problema em resolver eu.

Share this post


Link to post
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
Sign in to follow this  

×

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.