Suma cyfr w liczbie

0

Zadanie 1
Napisz program wypisujący wszystkie liczby 4

cyfrowe o sumie cyfr 21, 5 i 13.

Chce zrobić ten program używajac tablic.
Tutaj wpisuje liczbę,a chciałbym by brało liczby z przedialu <1000-9999> i jesli maja sume 21,5,13 to by je wypisywalo.
Przeszukałem cały internet i są tam rozwiązania,ale nie takie które mi są potrzebne ;/
Pozdrawiam.

import java.util.Scanner;
  
 public class Cztero{

   public static void main(String args[])
   {
     int liczba;
     int suma = 0;
     int reszta = 1;
     
    Scanner skaner=new Scanner(System.in);
     liczba=skaner.nextInt();

       do
       {
       reszta = liczba % 10;
       suma += reszta;
       liczba /= 10;
       }while(liczba != 0);

     }

}
0

To może zamiast szukac gotowca po prostu napiszesz to SAMODZIELNIE?

0

jakbym potrafil to bym to zrobił nie uważasz?

Mecze sie z tym już troche i nie umiem tego zrobić.

0

Nie potrafisz przeiterować za pomocą pętli for wszystkich liczb czterocyfrowych (podpowiedź: 1000..9999) i sprawdzić, czy suma cyfr tych liczb jest równa 21, 13 bądź 5?

0

Też się uczę javy i napisałem właśnie kod który może Ci się przydać:

static void liczbyWampirze(){
		wampirza:
		for(int i = 1000; i < 2000; i++){
			if(i % 100 == 0)
				continue;
			int l[] = new int[4];
			l[0] = i % 10;
			l[1] = (i / 10) % 10;
			l[2] = (i / 100) % 10;
			l[3] = (i / 1000) % 10;
			//System.out.println("Liczba " + i + " "+ l4 + " " + l3 + " " + l2 + " " + l1);
			for(int x1 = 0; x1 < 4; x1++) {
				for(int x2 = 0; x2 < 4; x2++) {
					for(int x3 = 0; x3 < 4; x3++) {
						for(int x4 = 0; x4 < 4; x4++) {
							if(x1==x2||x1==x3||x1==x4||x2==x3||x2==x4||x3==x4)
								continue;
							int tmp1 = l[x1] + l[x2] * 10;
							int tmp2 = l[x3] + l[x4] * 10;
							if (tmp1 * tmp2 == i) {
								System.out.println("Liczba wampirza: " + i + " pary liczb: " + tmp1 +", " + tmp2);
								continue wampirza;
							}
						}
					}
				}
			}
		}
	}

EDIT1: musisz zmienić samą końcówkę pętli, zmienić warunek w ostatnim ifie i zmienić wypisywany wynik, to parę sekund roboty a może czegoś się nauczysz :P
EDIT3: Wyrzuć też część która zaczyna pętlę od nowa jeżeli liczba jest wielokrotnością 100 :)
EDIT2: Btw. będę wdzięczny za wszystkie wskazówki dotyczące tego co napisałem.

0

Sume wszystkich liczb liczy dobrze.
Jesli dam przedzial 1001 i to mi wyswietli,że to ma sume rowna 2.Niestety dalej jak juz rosnie i jest 1002 to już,że suma =3 nie pokaże.
Nie wiem już co robie zle .

 public class Cztero{

   public static void main(String args[])
   {
     
     int suma = 0;
     int liczba;
     for(int i=1001;i<1003;i++)
     {
   

     liczba=i;
      
do {

int cyfra =  liczba % 10;  // wyciagamy z liczby ostatnią cyfrę (modulo 10)
suma += cyfra; // dodajemy ją do sumy
liczba /= 10; // modyfikujemy liczbę (pozbywamy się ostatniej cyfry)
  
   }while(liczba != 0);
   if(suma==1)
     System.out.println("liczba z suma 1 "+i);
   if(suma==2)
     System.out.println("liczba z suma 2 "+i);
   if(suma==3)
     System.out.println("liczba z suma 3 "+i);


     }
    

     }
} 
  




 
0

Ten kod:

   if(suma==1)
     System.out.println("liczba z suma 1 "+i);
   if(suma==2)
     System.out.println("liczba z suma 2 "+i);
   if(suma==3)
     System.out.println("liczba z suma 3 "+i);

powinien być wewnątrz pętli.

0

wtedy wyskakuja glupoty wlasnie

0
suma = 0; //tego brakowało
do {

suma = 0; //tego brakowało

int cyfra =  liczba % 10;  // wyciagamy z liczby ostatnią cyfrę (modulo 10)
suma += cyfra; // dodajemy ją do sumy
liczba /= 10; // modyfikujemy liczbę (pozbywamy się ostatniej cyfry)
   if(suma==1)
     System.out.println("liczba z suma 1 "+i);
   if(suma==2)
     System.out.println("liczba z suma 2 "+i);
   if(suma==3)
     System.out.println("liczba z suma 3 "+i); 
   }while(liczba != 0);
0

Zerowanie sumy ma być tuż przez do while. Suma ma się zerować dla każdej liczby.

0

dzieki za pomoc.Nie wiem jak na to nie wpadlem ;D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.