Nie sądziłem, że ktoś korzysta z moich wypocin, a jednak… 🙂 Jeden z czytelników bloga przygotował implementację większości dotychczas omówionych przeze mnie algorytmów, których znajomość może przydać się na maturze z informatyki. Wszystkich zainteresowanych zapraszam do zapoznania się z nimi. Autorem programów jest Robert Urbaniak.
Dzielniki liczby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Dzielniki { public static void main(String[] args) { Scanner s = new Scanner(System.in); int liczba = s.nextInt(); List<Integer> dzielniki = new ArrayList<Integer>(); for(int i=2;i<liczba;i++){ if((liczba % i)==0) dzielniki.add(i); //Jeśli reszta dzielenia liczby przez i wynosi 0 to jest to dzielnik i dodajemy do list } System.out.println(dzielniki.toString()); //Wypisanie dzielników } } |
Rozkład liczby na czynniki
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import java.util.*; public class Rozkładnik_liczb { public static void main(String[] args) { boolean pierwsza = true; Scanner S = new Scanner(System.in); //Pobieramy liczbę którą chcemy sprawdzić int liczba = S.nextInt(); //Zamiana na liczbę całkowitą String podzielniki = "Liczbę " + liczba+ " możemy zapisać jako iloczyn liczb:"; //Przygotowanie odpowiedzi do której dodamy podzielniki List<Integer> dzielniki = new ArrayList<Integer>(); //Deklarujemy listę która będzie zawierała x liczb pierwszych for(int i=2; i<liczba ; i++){ // Wyszukanie liczb pierwszych w zakresie od 2 do n pierwsza = true; for(int a=2; a<i; a++){ if((i % a) == 0){ pierwsza=false; } } if(pierwsza){ dzielniki.add(i); } }//KONIEC WYSZUKIWANIA LICZB PIERWSZYCH Collections.sort(dzielniki, Collections.reverseOrder()); //Posortowanie dzielników od największego do najmniejszego while(liczba!=1){//Dzielenie przez liczby pierwsze for(int b=0; b<dzielniki.size();b++){ if((liczba % dzielniki.get(b))== 0){ liczba = liczba/dzielniki.get(b); podzielniki += " "+ dzielniki.get(b)+ ","; } } } System.out.println(podzielniki); } } |
Liczby pierwsze
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.Scanner; public class Pierwsze { public static void main(String[] args) { Scanner n = new Scanner(System.in); // Pobieramy z konsoli liczbę którą chcemy sprawdzić int liczba = n.nextInt() ; //Scanner pobiera plik typu STRING dlatego używamy metody nextInt() do zamiany na liczbę całkowitą boolean pierwsza= true; //Zakładamy pierwotnie, że jest pierwszą for(int i=2; i<liczba; i++){ //Sprawdzamy dla każdej liczby od 2 do n-1 czy n jest podzielne przez nią if((liczba % i == 0)){ pierwsza = false; //Jeśli liczbę możemy podzielić przez inną liczbę niż 1 i nią samą to NIE JEST LICZBA PIERWSZA } } if(pierwsza)System.out.println("Liczba " + liczba + " Jest liczbą pierwszą"); else System.out.println("Liczba " + liczba + " Nie jest liczbą pierwszą"); } } |
Liczby doskonałe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Doskonała { public static void main(String[] args) { int liczba = 496; int suma= 0; int[] podzielniki = new int[liczba+1]; for(int i=1; i<=liczba; i++){ if((liczba % i) == 0){ //Szukanie podzielników liczby podzielniki[i]= i; } } for(int d=1; d<liczba;d++ ){ //Suma podzielników liczby suma+=podzielniki[d]; } if(suma==liczba)System.out.println("Liczba " + suma + " jest doskonała"); else System.out.println("Liczba " + liczba + " nie jest doskonała"); } } |
Sito Eratostenesa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.*; public class Szukaj_Liczb_Pierwszych { public static void main(String[] args) { int Liczba =523; //Liczba n do której szukamy liczb pierwszych boolean pierwsza=true; List<Integer> pierwsze= new ArrayList<Integer>(); // Lista liczb pierwszych for(int i=2;i<=523;i++){ //Sprawdzamy każdą liczbę z zasięgu od 2 do n(liczba) pierwsza=true; //Zakładamy, że jest pierwszą for(int a=2;a<i;a++){ if((i% a)==0) pierwsza=false; //sprawdzamy czy kolejna liczba jest liczbą pierwszą, sprawdzamy czy ma podzielniki jeśli tak to ustawiamy pierwsza=false } if(pierwsza) pierwsze.add(i); //Jeśli pierwsza=true to dodajemy do spisu pierwszych } System.out.println(pierwsze.toString()); //Wypisujemy liczby pierwsze } } |
Największy wspólny dzielnik
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.*; public class NWD { public static void main(String[] args){ int a = 999; int b = 81; String odp = "NWD liczb: " + a+ " i " + b + " wynosi: "; int c; while(b!=0){ //Dopóki reszta dzielenia przez liczby a i b nie będzie 0 to c = a % b; //Obliczenie reszty a = b; //Zamiana dzielnej z dzielnikiem b = c;//Zamiana dzielnika z resztą } System.out.println(odp +a); //Aby obliczyć NWW wystarczy użyć takiej formuły: //NWW=Pierwsza_liczba*Druga_liczba/NWD } } |
Konwersja pomiędzy systemem binarny, a dziesiętnym
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.*; public class Konwersja { public static void main(String[] args){ String binarna =new String("101110111"); int dec =0; int potęga = 1; for(int i=binarna.length();i>=1;i--){ //Istotne jest, że i sprawdzamy od końca if(binarna.charAt(i-1)=='1'){ //Metoda charAt pobiera nam jeden znak o danym indexie ze stringa dec = dec + (1*potęga); System.out.println(dec); } potęga=potęga*2; } System.out.println("Liczba dziesiętna to: "+dec); } } |
Potęgowanie
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Potęga { public static void main(String[] args) { int wykładnik =2; int potęga = 8; int suma=1; for(int i=1; i<=potęga;i++){ suma=suma*wykładnik; } System.out.println(suma); } } |
Sortowanie bąbelkowe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class Bąbelkowe { public static void main(String[] args){ int[] tab = {5,4,3,1,6,2,3,5,1,2}; int zmiany= 1; int próba; int pomoc; while(zmiany!=0){ //Póki ani razu nie przestawimy liczb będzie działać próba=0; zmiany=0; while(próba!=tab.length-1){ //Próba przestawienia dla każdego indexu if(tab[próba]<tab[próba+1]){ zmiany++; pomoc = tab[próba]; tab[próba] = tab[próba+1]; //Jeśli index n jest mniejszy od n+1 to zamień n i n+1 tab[próba+1]= pomoc; } próba++; } } for(int i=0; i<tab.length;i++){ System.out.print(tab[i]+ " "); //wypisuje tablicę } } } |
Silnia
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Silnia { public static void main(String[] args) { int silnia = 3; int suma = 1; for(int i=2;i<=silnia;i++){ suma=suma*i; } System.out.println("Silnia z liczby: "+ silnia+ " wynosi " + suma); } } |
Anagramy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Anagramy { public static void main(String[] args) { String pierwsza = new String("masło"); //Deklaracja pierwszego słowa String druga = "słoma"; //Deklaracja drugiego słowa boolean anagram = true; //Założenie, że jest anagramem for(int i=0; i<pierwsza.length();i++){ if(druga.indexOf(pierwsza.charAt(i))==-1){ anagram = false; } } if(anagram){ System.out.println("Jest"); }else System.out.println("nie jest"); } } |
Palindromy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Palindrom { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Ave\\Desktop\\Dane_PR2\\palindrom.txt")); //Przykładowa ścieżka pliku UWAGA: ZAWSZE STAWIAĆ 2x \\ String line; boolean pali; while((line=br.readLine())!=null){ String palindro = new String(line); String palindrom = palindro.replace(" ", ""); pali = true; for(int i=0;i<(int)Math.floor(palindrom.length()/2);i++){ if(Character.toLowerCase(palindrom.charAt(i))!=Character.toLowerCase(palindrom.charAt(palindrom.length()-(i+1)))){ pali=false; } } if(pali){ System.out.println("Słowo: "+ palindrom + " - jest palindronem"); }else{ System.out.println("Słowo: "+ palindrom + " - nie jest palindronem"); } } } } |