Skip to content

Instantly share code, notes, and snippets.

@folivetti
Created April 5, 2017 11:13
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save folivetti/33c0fdf87896f09fe5555264c81a7251 to your computer and use it in GitHub Desktop.
import java.util.Scanner;
class Main {
public static void imprimeVetor(int [] v) {
for(int i=0; i<v.length-1; i++){
System.out.print(v[i] + ", ");
}
System.out.println(v[v.length-1]);
}
public static int somatoria(int [] v) {
int soma = 0;
for(int i=0; i<v.length; i++){
soma += v[i];
}
return soma;
}
public static int produtoria(int [] v) {
int prod = 1;
for(int i=0; i<v.length; i++){
prod *= v[i];
}
return prod;
}
public static int [] alteraVetor(int [] v) {
int [] u = new int [v.length];
for(int i=0; i<v.length; i++){
u[i] = v[i] + i*i;
}
return u;
}
public static int [] produtoElemento(int [] v, int [] u) {
int [] w = new int [v.length];
if (v.length==u.length){
for(int i=0; i<v.length; i++){
w[i] = v[i]*u[i];
}
}
return w;
}
public static int produtoInterno(int [] v, int [] u) {
return somatoria(produtoElemento(v, u));
}
public static int [] insertSort(int [] v) {
for(int i=1; i<v.length; i++) {
int j = i;
while (j>0 && v[j-1] > v[j]) {
int temp = v[j];
v[j] = v[j-1];
v[j-1] = temp;
j = j - 1;
}
}
return v;
}
public static int buscaBinaria(int [] v, int x) {
int esq = 0, dir = v.length-1;
int m;
while (esq <= dir) {
m = (int) Math.floor( (esq+dir)/2.0 );
if (v[m] < x) esq = m+1;
else if (v[m] > x) dir = m-1;
else return m;
}
return -1;
}
public static int [] inverteVetor(int [] v) {
int [] u = new int[v.length];
for(int i=0;i<v.length;i++) {
u[i] = v[v.length - 1 - i];
}
return u;
}
public static int [] vetorBinario(int x) {
int nbits =(int) (Math.log(x)/Math.log(2) + 1.0);
int [] bin = new int [nbits];
int i = 0;
while (x>0) {
bin[i] = x%2;
x = x/2;
i++;
}
return inverteVetor(bin);
}
public static void imprimeIndices(int [] b){
for(int i=0;i<b.length-1;i++) {
if (b[i]>0) System.out.print(i+",");
}
if (b[b.length-1]>0) System.out.print((b.length-1)+",");
}
/* eu errei no enunciado, esse algoritmo nao imprime na ordem crescente */
public static void imprimeConjuntos(int m, int n) {
int qtde = (int)Math.pow(2, n);
for(int i=1;i<qtde;i++){
int [] bits = vetorBinario(i);
if (somatoria(bits) == m) {
imprimeIndices(inverteVetor(bits));
System.out.println("");
}
}
}
public static void main(String[] args) {
int [] v = {1, 4, 3, 5, 2, 7, 6};
imprimeVetor(v);
System.out.println(somatoria(v));
System.out.println(produtoria(v));
int [] u = alteraVetor(v);
imprimeVetor(u);
imprimeVetor(produtoElemento(v, u));
System.out.println(produtoInterno(v,u));
int [] sv = insertSort(v);
imprimeVetor(v);
System.out.println(buscaBinaria(v,3));
System.out.println(buscaBinaria(v,10));
imprimeVetor(inverteVetor(sv));
imprimeVetor(vetorBinario(10));
imprimeConjuntos(3,5);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment