Skip to content

Instantly share code, notes, and snippets.

@gusalbukrk
Created August 21, 2023 20:57
Show Gist options
  • Save gusalbukrk/52fccfd40e553e36b35608186826af94 to your computer and use it in GitHub Desktop.
Save gusalbukrk/52fccfd40e553e36b35608186826af94 to your computer and use it in GitHub Desktop.
#java

Maratona 2022 - Resoluções

A - Medição Climática

import java.util.Arrays;
import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner s = new Scanner(System.in);

    int dias = s.nextInt();
    int porDia = s.nextInt();

    double[][] medicoes = new double[dias][porDia];

    for (int i = 0; i < dias; i++) {
      for (int j = 0; j < porDia; j++) {
        medicoes[i][j] = s.nextDouble();
      }
    }

    s.close();

    System.out.println("-Media das medicoes dos dias-");

    for (int i = 0; i < dias; i++) {
      System.out.printf("Dia %d: ", i);
      System.out.printf("%.2f\n", Arrays.stream(medicoes[i]).reduce((acc, cur) -> acc + cur).getAsDouble() / porDia);
    }
    
    System.out.println("-Media de cada medicao diaria -");

    for (int i = 0; i < porDia; i++) {
      System.out.printf("Medicao %d: ", i);

      double soma = 0.0;

      for (int j = 0; j < dias; j++) {
        soma += medicoes[j][i];
      }

      System.out.printf("%.2f\n", soma / dias);
    }

    // System.out.println(Arrays.deepToString(medicoes));
  }
}

C - Divisão

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int dividendo = scanner.nextInt();
    int divisor = scanner.nextInt();

    int quociente = dividendo / divisor;

    for (int i = 1; i < quociente; i++) {
      System.out.println(dividendo - divisor * i);
    }

    System.out.println(dividendo % divisor);
    System.out.println(quociente);

    scanner.close();
  }
}
import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int dividendo = scanner.nextInt();
    int divisor = scanner.nextInt();

    int i = 0;
    while (dividendo >= divisor) {
      i++;
      dividendo -= divisor;

      if (dividendo >= divisor) System.out.println(dividendo);
    }

    System.out.println(dividendo);
    System.out.println(i);

    scanner.close();
  }
}

E - Números primos

import java.util.Scanner;

class Main {
  // 
  public static boolean isPrime(int n) {
    // 2 is the only even prime number
    if (n > 2 && n % 2 == 0) return false;

    // if num is divisible by any number greater than its square root,
    // then the result of the division would also be a number smaller than the square root
    // this would have already been checked in previous iterations
    for (int i = 3; i <= Math.sqrt(n); i += 2) {
      if (n % i == 0) return false;
    }

    return true;
  }

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int n = scanner.nextInt(); // n primeiros números primos
    int x = scanner.nextInt() * 2; // a partir do dobro de x

    while (n != 0) {
      if (isPrime(x)) {
        System.out.println(x);
        n--;
      }

      x++;
    }

    scanner.close();
  }
}

I - Conversão de bases

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    scanner.close();

    String binary = "";

    while (n != 1) {
      if (n % 2 == 0) {
        binary += "0";
      } else {
        binary += "1";
        n -= 1;
      }

      n /= 2;
    }
    binary += "1";
   
    System.out.println(new StringBuilder(binary).reverse().toString());
  }
}

J - Sequência de bits

import java.util.Scanner;

class Main {
  // pad with 0s
  // direcao: 0 = end, 1  start
  public static String pad(String str, int posicao, int quantidade) {
    for (; quantidade > 0; quantidade--) {
      if (posicao == 0) {
        str += "0";
      } else {
        str = "0" + str;
      }
    }

    return str;
  }

  public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    String binarioInput = s.next();
    // 0 = << (esquerda, add 0s to end); 1 = >> (direita, add 0s to start)
    int deslocamento = s.nextInt();
    int quantidade = s.nextInt();
    s.close();

    // pad start to achieve length 8
    binarioInput = pad(binarioInput, 1, 8 - binarioInput.length());
    
    binarioInput = pad(binarioInput, deslocamento, quantidade);

    int start = deslocamento == 1 ? 0 : quantidade;
    for (int i = start; i < start + 8; i++) {
      System.out.println(binarioInput.charAt(i));
    }
  }
}
import java.util.Scanner;
import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    String binarioInput = s.next();
    int deslocamento = s.nextInt(); // 0 = << (esquerda); 1 = >> (direita)
    int quantidade = s.nextInt();
    s.close();

    // create array and fill it with 0s to achieve length equal to 8
    int[] binario = new int[8];
    Arrays.fill(binario, 0);
    //
    int start = 8 - binarioInput.length();
    for (int i = start; i < 8; i++) {
      binario[i] = Integer.parseInt(Character.toString(binarioInput.charAt(i - start)));
    }

    // desloca
    if (deslocamento == 0) {
      for (int i = 0; i < 8; i++) {
        if (i + quantidade < 8) { // desloca
          binario[i] = binario[i + quantidade];
        } else { // preenche com 0
          binario[i] = 0;
        }
      }
    } else {
      for (int i = 7; i >= 0; i--) {
        if (i - quantidade >= 0) { // desloca
          binario[i] = binario[i - quantidade];
        } else { // preenche com 0
          binario[i] = 0;
        }
      }
    }

    for (int bit : binario) {
      System.out.println(bit);
    }
  }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment