Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

v1tal1ty

Olimpiada em INETE. Querem tentar

Mensagens Recomendadas

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;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.