Algorytm na powtarzającą się liczbę

0

Próbuje napisać algorytm, który z podanego zakresu 100 liczb, znajdzie wszystkie które zawierają np. cyfrę 7. np. 7, 17 , 27 itp.

Możecie mi podpowiedzieć jak tego dokonać?

2

Przeiterować po wszystkich liczbach, zrzucić do stringa i wyszukać siódemkę w zapisie dziesiętnym dla każdej liczby.

1

wystarczy sprawdzić czy modulo 10 jest równe 7 ̶l̶u̶b̶ jeśli liczba jest więcej niż jedno cyfrowa podzielić przez 10 i wykonać punkt pierwszy.

1

@topik92 Modulo może nie działać dla liczb ujemnych, zależy od implementacji, więc trzeba być ostrożnym.

0
Afish napisał(a):

Przeiterować po wszystkich liczbach, zrzucić do stringa i wyszukać siódemkę w zapisie dziesiętnym dla każdej liczby.

Próbuję to zrobić od jakiegoś czasu i jedyne co wymyśliłem:

Zrobiłem tablice na 100 liczb, dodałem liczby od 1 do 100, a teraz próbuję zmienić jakoś** int** na te stringi, ale się nie da, bo podkreśla błąd i informuje, że wymaga int a znalazło string

public class Test {

    public static void main(String[] args){

        int[] sto = new int[100];
        
        for (int i = 0; i <100; i++){

            sto[i] = i + 1;
            sto[i] = String.valueOf(sto[i]);
        }

    }

}
1

No to zróbmy to z kaczuszką:

  1. Najpierw tworzysz tablicę stu integerów (liczb).
  2. Następnie iterujesz po kolejnych liczbach od 0 do 99 włącznie.
  3. W pętli najpierw przypisujesz do kolejnego elementu tablicy liczbę.
  4. A następnie do tego samego elementu tablicy przypisujesz stringa utworzonego przez sparsowanie właśnie przypisanego elementu tablicy.

Widzisz bezsens swojego kodu? A masz zrobić to:

  1. Iterujesz po kolejnych liczbach
  2. Zrzucasz daną liczbę do stringa przez toString()
  3. Sprawdzasz, czy string zawiera cyfrę siedem przez contains, indexOf, czy co tam jest w Javie.

Edycja: nie kasuj swoich wiadomości.

0

chyba się udało, ale proszę o potwierdzenie bo to mój pierwszy algorytm który działa :) wynik 19


public class Test {

    public static void main(String[] args){

        int[] sto = new int[100];
        String[] sto2 = new String[100];
        int licznik = 0 ;

        for (int i = 0; i <100; i++){

            sto[i] = i + 1;

        }

        for (int i = 0; i <100; i++){

            sto[i] = i + 1;
            sto2[i] = String.valueOf(sto[i]);
        }


        for (int i = 0; i <100; i++){

            if (sto2[i].contains("7"))
            {

                licznik = licznik + 1;

            }

        }

        System.out.println(licznik);

    }

}

1

Ech, w ogóle mnie nie słuchasz. Na co Ci trzy pętle? Na co Ci tablica?

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		int result = 0;
		for(int i=0;i<100;++i){
			if(("" + i).indexOf("7") != -1)result++;
		}
		System.out.println(result);
	}
}
2

Można jeszcze tak, jak już jesteśmy w dobie Javy 8:

long result = IntStream
                .rangeClosed(1, 100)
                .mapToObj(Integer::toString)
                .filter(s -> s.contains("7"))
                .count();
System.out.println(result);
1
Afish napisał(a):

Ech, w ogóle mnie nie słuchasz. Na co Ci trzy pętle? Na co Ci tablica?

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		int result = 0;
		for(int i=0;i<100;++i){
			if(("" + i).indexOf("7") != -1)result++;
		}
		System.out.println(result);
	}
}

Wynik będzie nieprawidłowy, bo tylko raz policzy 77.

1

z 77 bierze tylko jedna 7, tak jak w moim

Źle precyzujesz zadanie, to i złe wyniki dostajesz. Było powiedziane:

Próbuje napisać algorytm, który z podanego zakresu 100 liczb, znajdzie wszystkie które zawierają np. cyfrę 7. np. 7, 17 , 27 itp.

Ani słowa o specjalnym traktowaniu 77. Czytelnik zechce sam dostosować program do swoich potrzeb.

1 użytkowników online, w tym zalogowanych: 0, gości: 1