Algorithmus in JAVA schreiben

  • Themenstarter Themenstarter HeinrichStol
  • Beginndatum Beginndatum
H

HeinrichStol

Gast
Hallo!

Meine Frage ist wie man diese Formel:

(a*b+1)/c

in Java schreiben kann!
Also:
b und c sind gegeben und ich will mir a ausrechnen!
Zu beachten ist das "a" Element der natürlichen Zahlen ist und das, wenn ich a mit b multipliziere und 1 dazu addiere und durch c dividiere soll eine gerade Zahl das Ergebnis werden.

meine idee:

Java:
int y;
int a;

while((a*b+1)%c == 0)
		{
			a = y;
			k++;
		}

mfg.
 
Code:
((a * b + 1) / c) % 2 == 0

Wieso wird k in der Schleife inkrementiert? Wo und wie ist sie definiert?
 
Java:
while(((a * b + 1) / c) % 2 == 0)
		{
			a++;
		}
System.out.println(a);

Bei den Zahlen:
b = 108
c = 5

sollte a = 3 sein..!
funktioniert aber nicht!
 
Bei deinen Werten ist das Ergebnis der Division 65, was durch 2 nicht restlos teilbar ist. Die erste Zahl wäre 4 (86).

Java:
public static void main(String[] args)
{
	int a = 0;
	int b = 108;
	int c = 5;

	while(a == 0 || ((a * b + 1) / c) % 2 != 0)
		a++;
	System.out.println(a);
}
 
Die Zahl soll auch nicht teilbar sein, also:

b = 108
c = 5

(a*b+1)/c = Element der natürlichen Zahlen

a = ?

ich will nur das a wissen.. 😉
 
Ich dachte, du willst wenn a von 1 - n zählt die Erste Zahl wissen, durch die rl. teilbar ist. ???:L
Wenn du die Erste Zahl, durch die nicht teilbar ist wissen willst, dann musst du natürlich die Abfrage in der if umdrehen, in dem Fall wäre die Erste Zahl 1 (108 + 1 = 109 / 5 = 21 % 2 = 1).
 
Dann hab ich wohl die Frage schlecht geschrieben.

Nochmal^^

E€N .. Element der natürlichen Zahlen

a = E€N*c / (b+1)

oder

(a*b+1)/c = Element der natürlichen Zahlen

und hier soll zu "a" immer 1 dazu addiert werden bis die erste Zahl kommt bei der eine gerade Zahl(E€N) ensteht bei der Division:

b = 108
c = 5

(a*b+1)/c
==>
(1*108 +1) / 5 = 21,8 ... keine natürliche Zahl
(2*108 +1) / 5 = 43,4 ... keine natürliche Zahl
(3*108 +1) / 5 = 65 ... == natürliche Zahl ==> a == 3

ich hoffe so versteht ihrs!
 
so vielleicht?

Java:
public static void main(String[] args)
	{
	    int a = 0;
	    int b = 108;
	    int c = 5;
	 
	    while(a == 0 || (a * b + 1) % c != 0)
	        a++;
	    System.out.println(a);
	}
 
Ach so, bin nicht der Hellste.
Aber da musst du wohl auf BigDezimal umsteigen, da double selbst nicht genau genug sind.

Java:
public static void main(String[] args)
{
	BigDecimal a = new BigDecimal("1");
	BigDecimal b = new BigDecimal("108");
	BigDecimal c = new BigDecimal("5");
	
	while(computing(a, b, c) % 1 != 0)
		a = a.add(new BigDecimal("1"));
	System.out.println(a);
}
private static double computing(BigDecimal a, BigDecimal b, BigDecimal c)
{
	BigDecimal cache = a.multiply(b);
	cache = cache.add(new BigDecimal("1"));
	cache = cache.divide(c);
	return(Double.parseDouble(cache.toString()));
}

Edit: Ups, wie gesagt, bin nicht der Hellste. 😳
 
Nein ich war zu voreilig... das von EdelStoff stimmt doch nicht!
es rechnet den richtigen Wert aus wenn ich 108 und 5 nehme, sobald ich andere Werte nehme stimmt es nicht mehr!

@Volvagia:
Bei dem kenn ich mich noch nicht aus!
Verstehe nicht was das BigDecimal bringt?
 
Damit du größere Zahlen benutzen kannst, als double zulassen. Ein Vorteil ist aber auch, dass die Ergebnisse immer exakt sind, sollten sie auch einmal dezimal nicht darstellbar sein (z. B. new BigDecimal("10").divide(new BigDecimal("3"))) fliegt auch eine Exception und es kommt nicht zu einen unerwarten Ergebniss. Wenn dieses Programm funktioniert (habs auch nur mit deinen Zahlen getestet), wäre es sinnvoll BigDecimal("1") als eine Konstante anzulegen und es immer wieder zu verwenden, da sie mutable, also unveränderbar sind.
 
Zuletzt bearbeitet:
Ah ist interessant!
Bin noch ein ziemlicher Neuling!^^

Ich werde es morgen versuchen in mein Programm einzubinden! danke!
 

Zurück
Oben