Submeter | Todas submissőes | Melhores | Voltar |
F91 - f91 |
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ãof91 (N) = f91 (f91 (N + 11))
; - Se
N ≥ 101
, entãof91 (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
Adicionado por: | Wanderley Guimarăes |
Data: | 2007-10-02 |
Tempo limite: | 3s |
Tamanho do fonte: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Linguagem permitida: | Todas exceto: ASM64 CLOJURE ERL FSHARP JS-RHINO PERL6 PY_NBC SCALA TCL |
Origem: | Segunda Seletiva para Maratona de Programacao UFRN - 2004 |
hide comments
|
|||||||||
2013-05-30 18:44:18 luksky
Pessoal sabem me dizer se as saidas correspondentes as minhas entradas podem ser retornadas imediatamente apos a entrada ou precisam ser armazenadas e retornadas todas juntas apos a entrada 0 ? |
|||||||||
2013-01-09 13:32:55 Loïc
se N==91, f91(91)=f91(f91(102)) f91(91)=f91(92) f91(91)=f91(f91(103)) f91(91)=f91(93) ... f91(91)=f91(100) f91(91)=f91(f91(111)) f91(91)=f91(101) f91(91)=91 !! |
|||||||||
2012-12-26 13:32:25 Gustavo Nascimento
Como será que o carinha conseguiu 0,10s em C??? o melhor que consegui foi 0,61 =x |
|||||||||
2012-06-11 06:35:54 Renato R. de Resende [UFU]
Existe um padrăo para f91(N). Tornando assim, desnecessário o uso da recursăo. |
|||||||||
2012-05-29 13:36:06 Vinicius C. Tavares [FUNEDI-UEMG]
Năo acredito que o meu erro era somente no printf, tava colocando no printf: printf("F91(%d) = %d\n", n,a); e dava erro de resposta errada, so pq o F91 estava tudo em caixa alta. |
|||||||||
2012-05-06 04:39:16 Chris Nic
Cara, sério.. eu năo consigo imaginar qual é a mágica para rodar isso em Java. Com C eu fiz rodar sem recursividade.. Mas com Java realmente năo vai MESMO! "Tempo limite excedido" Será que isso tem alguma coisa haver com a máquina virtual do Java demorar demais para dar up? |
|||||||||
2012-02-16 21:45:24 qwert
Eu fiz em c++, usei recursăo e um vector e consegui 1.42seg e 2.48MB!! é so vc ń usar, se vc for usar, estruturas de controle e repetiçăo sem necessidade!! |
|||||||||
2011-12-07 16:48:10 Natan Pedrosa [UESPI]
Last edit: 2012-02-08 14:13:54 |
|||||||||
2011-12-05 23:40:57 Matheus de Araújo
O "segredo" para um tempo baixo é năo usar recursăo... Tentem descobrir um padrăo para f91(N) :) Ah, f91(91) = 91 sim... f(91)=f91(f91(102))=f91(92)=[...]=f91(100)=f91(f91(111))=f91(101)=91 |
|||||||||
2011-12-01 11:26:04 Rafael Pertile
Pessoal o código é simples mais prestem atençăo nas condiçőes. e f91(91) = 91 sim. Alguem conseguiu passar em JAVA no meu da tempo limite em C passo. |