Algorytm na powtarzającą się liczbę

Odpowiedz Nowy wątek
2017-06-19 20:16
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ć?

edytowany 1x, ostatnio: bogdans, 2017-06-21 11:30
Spróbuj zrozumieć różnicę między liczbą a cyfrą. - bogdans 2017-06-21 11:32

Pozostało 580 znaków

2017-06-19 20:54
2

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

Pozostało 580 znaków

2017-06-19 23:40
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.

edytowany 1x, ostatnio: topik92, 2017-06-21 20:22
W sumie to modulo nie uwzględnia takich liczb jak 71, 72, 73... - Rizorz 2017-06-21 20:15
dlatego dzielisz przez 10 liczby które mają więcej niz jedną cyfre. sprawdzasz 71 %7 a potem (71/10) % 7 i tak dalej dla dowolnie dużej liczby. - topik92 2017-06-21 20:24

Pozostało 580 znaków

2017-06-20 06:08
1

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

Math.abs() na ratunek - Rizorz 2017-06-20 11:56
Math.abs() może rzucić wyjątkiem dla int.minvalue (przykładowo w .NET tak jest) i nagle robi nam się kombinowanie, a wystarczy tylko number.ToString().Contains("7") i spokój. - Afish 2017-06-21 18:35
Temat to algorytmy i struktury danych, wiec to beznaczenia - topik92 2017-06-21 19:51

Pozostało 580 znaków

2017-06-21 19:21
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]);
        }
 
    }
 
}

Pozostało 580 znaków

2017-06-21 19:24
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.

edytowany 1x, ostatnio: Afish, 2017-06-21 19:25
sory usunalem przed chwila co napisalem, bo wpadlem na inny pomysl, ale tez nie dzialal, juz czytam co podpowiedziales - watpliwosci 2017-06-21 19:25

Pozostało 580 znaków

2017-06-21 19:39
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);
 
    }
 
}
 
edytowany 2x, ostatnio: watpliwosci, 2017-06-21 19:46
powinno byc 20, hmm - watpliwosci 2017-06-21 19:44

Pozostało 580 znaków

2017-06-21 19:56
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);
    }
}
faktycznie wygląda zgrabniej, ale wynik też jest błędny - watpliwosci 2017-06-21 20:07
To wypisz te liczby zawierające siódemki. - Afish 2017-06-21 20:09
z 77 bierze tylko jedna 7, tak jak w moim - watpliwosci 2017-06-21 21:02

Pozostało 580 znaków

2017-06-21 20:18
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);

Pozostało 580 znaków

2017-06-21 20:48
Pętliczek
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.

Chodzi o liczby które zawierają 7, a nie ile siódemek jest w zakresie, np. 1-100. 77 zawiera 7? Zawiera, więc algorytm leci dalej. - Rizorz 2017-06-21 20:50

Pozostało 580 znaków

2017-06-21 21:39
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.

i tak mi bardzo pomogłeś - watpliwosci 2017-06-21 21:53

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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