Ir ao conteúdo
  • Cadastre-se
Usuário 25

RESOLVIDO converter de Java para C

Posts recomendados

import java.util.*;
import java.io.*;
import java.lang.*;

public class codigo_java {

    public static int MAX = 10;
    
    public static void main(String[] args) throws IOException {
	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        int N;
	String buf;

	ArrayList<HashSet<String>> prefixo = new ArrayList<HashSet<String>>(MAX+1);
	ArrayList<HashSet<String>> sufixo = new ArrayList<HashSet<String>>(MAX+1);

	for ( int i = 0; i <= MAX; i++ ){
	    prefixo.add(new HashSet<String>());
	    sufixo.add(new HashSet<String>());
	}
	
        String line = in.readLine();    
        StringTokenizer tokenizer = new StringTokenizer(line," ");
        N = Integer.parseInt(tokenizer.nextToken());

	for ( int i = 0; i < N; i++ ){
	    line = in.readLine();
	    tokenizer = new StringTokenizer(line," ");
	    buf = tokenizer.nextToken();

	    // checa validade
	    for ( int k = MAX; k > 0; k-- ){
		String pref = buf.substring(0,k);
		if ( sufixo.get(k).contains( pref ) ){
		    if ( k == MAX ){
			System.out.println( buf );
			return;
		    } else {
			String suf = buf.substring(k,MAX);
			if ( prefixo.get(MAX-k).contains( suf ) ){
			    System.out.println( buf );
			    return;
			}
		    }
		}
	    }

	    // inclui palavra (prefixos e sufixos)
	    for ( int k = MAX; k >= 0; k-- ){
		if ( k < MAX && k > 0 ){
		    String pref = buf.substring(0,k);
		    prefixo.get(k).add( pref );
		}
		if ( k < MAX ){
		    String suf = buf.substring(k,MAX);
		    sufixo.get(MAX-k).add( suf );
		}
	    }
	    
	}

	System.out.println( "ok" );
    }
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde @Usuário 25

 

Qual seria a sua duvida?

 

Qual parte do código você não conseguiu reescrever?

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Leonardo0308

Seu programa deve imprimir uma linha contendo a cadeia "ok" caso o código seja válido, ou contendo a primeira cadeia na sequência que invalida o código. Quer dizer, contendo Sk onde k é o menor possível tal que Sk seja subcadeia de uma concatenação de duas cadeias anteriores na sequência.

Exemplos

Entrada

3

aaaaaaabbb

yyuudiwwkl

kkfidaaooa

Saída

ok

 

Entrada

4

aaaaaaabbb

yyuudiwwkl

kkfidaaooa

aooaaaaaaa

Saída

aooaaaaaaa

 

Entrada

1

jfjshiddds

Saída

ok

 

Porém o meu código só aparace ok para tudo.

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

#define MAX 10
char buf;
int N;
char prefixo[MAX+1],sufixo[MAX+1];

int main(int argc, char *argv[]) {
	int N;
	int i, k;
	char pref, suf; 
	
	scanf("%d", &N);
    for ( i = 0; i < N; i++ ){
    scanf("%s", &buf);

    for ( k = MAX; k > 0; k-- ){
      if ( sufixo[k] > 0 ){
	if ( k == MAX ){
    printf("%s",&buf );
	  return 0;
	} else {
	  if ( prefixo[MAX-k] > 0 ){
	    printf("%s",&buf );
	    return 0;
	  }
	}
      }
    }
    for ( k = MAX; k >= 0; k-- ){
      if ( k < MAX && k > 0 ){
	prefixo[k];
      }
      if ( k < MAX ){
	sufixo[MAX-k];
      }
    }
    
  }
  
printf( "ok" );
      


	return 0;
}

Tentei converter mas não funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, o printf("ok") está fora de qual quer condição, então ele sempre vai aparecer.

 

9 minutos atrás, Usuário 25 disse:

Quer dizer, contendo Sk onde k é o menor possível tal que Sk seja subcadeia de uma concatenação de duas cadeias anteriores na sequência.

 

Não entendi, muito bem isso ai não.

 

E tenta indentar o seu código, para torna-lo mais legível. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!