Entrada e saida

10 respostas
P

gente podem me da uma ajuda de como resolver em modo arquivo? é uma questão de um trabalho na faculdade.

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

10 Respostas

carlinbh

A fórmula é essa aqui cara:

public int f91(int n) {
	if(n<=100) {
		n = f91(f91(n+11));
	} else {
		n = n-10;
	}
	return n;
}

Você está querendo ler os números de um arquivo txt por exemplo?

E

Pra começar, usar a fórmula recursiva cegamente vai fazer com que seu problema demore muito para ser resolvido, o que provavelmente é um requisito não declarado quando você está tentando resolver esse problema (parece um daqueles problemas do SPOJ ou do Project Euler).

De qualquer maneira, esse problema, lendo-se cuidadosamente o enunciado, resume-se a conseguir calcular os valores de F91 para o intervalo de 1 a 100 de forma eficiente. Eu poria esses valores em um array de 101 posições. Os outros valores são trivialmente calculados.

DaniloAndrade

so uma correção essa saida “f91(91) = 91” esta errada
o valor correto seria f91(91) = 92
pois na primeira passagem pelo metodo seria somado 11 o resultado seria 102 e na ultima seria subtraído 10 e o resultado final seria 92

91+11 = 102
102-10= 92

carlinbh

A saída tá certa cara, porque o ultimo valor a cair no método é 101.

carlinbh

E se for pensar nessa fórmula com melhor desempenho então não teria motivo para criar um array de 101 posições.
simplesmente qualquer numero menor ou igual 101 o resultado é 91

DaniloAndrade

como assim? explica melhor porque eu não entendi

carlinbh

Pega esse trecho e roda em uma classe que você vai ver.

public int f91(int n) {
		System.out.println("f91("+n+")");
		if(n<=100) {
			n = f91(f91(n+11));
		} else {
			n = n-10;
		}
		return n;
	}
DaniloAndrade

verdade, eu não prestei atenção no enunciado

f91 (N) = f91 (f91 (N + 11));

e eu entendi

f91 (N) = f91 (N + 11);

denisspitfire

questao do spoj…

denisspitfire

em Java acho que nao vai rolar… vai demorar mto

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