[resolvido] entrada e saida!

10 respostas
P

ae da uma sacada ae eu fiz dessa forma, agora a pergunta é tem como simplificar mais que isso?

a questão é essa..

McCarthy é um teórico famoso de ciência da computação. No seu trabalho, ele definiu uma função recursiva, chamada f91, que recebe como entrada um inteiro N e retorna um inteiro positivo definido como a seguir:
Se N ≤ 100, então f91 (N) = f91 (f91 (N + 11));
Se N ≥ 101, então f91 (N) = N - 10.
Escreva um programa que computa a função f91 de McCarthy.
Entrada
O arquivo de entrada consiste de uma série de inteiros positivos, cada inteiro é no máximo 1.000.000. Há no máximo 250.000 casos de teste. Cada linha possui somente um número. O fim da entrada é alcançada quando o número 0 é encontrado. O número 0 não deve ser considerado como parte do conjunto de teste.
Saída
O programa deve imprimir cada resultado em uma linha, seguindo o formato fornecido no exemplo de saída.
Exemplo

Entrada:
500
91
0

Saída:
f91(500) = 490
f91(91) = 91

Arquivo ioLista0201 = new Arquivo("entrada0201.txt","saida0201.txt");
		
		while(!ioLista0201.isEndOfFile()){
			int teste = ioLista0201.readInt();
			
			if(teste != 0){
			
				System.out.println(f91(teste));
				
				
				
			}else{
				ioLista0201.close();
			}
		}
		
		
	}
	static int f91(int n){
		if(n >= 101){
			n = n - 10;
			return n;
		}else{
			n = f91(f91(n+11));
			return n;
		}
				
	}

10 Respostas

Rodrigo_Sasaki

O que você quer dizer com simplificar?

P

um codigo mais simples, ou fazer de outra forma?

Rodrigo_Sasaki

O método recursivo é isso aí mesmo, não tem muito segredo…

Agora a parte de leitura e escrita talvez possa ser melhorada, mas não sei porque não sei como você está fazendo :slight_smile:
Tudo que sei é que você tem um arquivo saida0201.txt que não usa pra nada.

P

coloquei so pra mostrar mesmo até pq a saída cria automatico.

só queria d auma olhada em um codigo melhorado pra ver como fica.

Rodrigo_Sasaki

Mas então, aí eu fiquei confuso.

O que você quer simplificar? O algoritmo recursivo? Você pode alterar a implementação dele para usar um operador ternário ao invés de if: static int f91(int n){ return n >= 101 ? n - 10 : f91(f91(n + 11)); } É algo assim que você quer?

P

recursiva não.

poderia me mostrar a usar um operador ternário ao invés de if ?

fiquei curioso :slight_smile:

Rodrigo_Sasaki

pytter3:
recursiva não.

poderia me mostrar a usar um operador ternário ao invés de if ?

fiquei curioso :)


Eu mostrei no exemplo acima. :slight_smile:

Rodrigo Sasaki:
static int f91(int n){ return n >= 101 ? n - 10 : f91(f91(n + 11)); }

P

eita foi mesmo desculpa, que leseira minha kkkk

:slight_smile:

P

valeu pela força meu velho :smiley:

A

Hehehehe… isso é questão de treinamento de algoritmo. Você testou a bateria e passou em todos os testes ?
http://br.spoj.com/problems/F91/

Criado 10 de abril de 2013
Ultima resposta 10 de abr. de 2013
Respostas 10
Participantes 3