So mein erstes Rätsel... Hab mir hier schon häufiger Topics durchgelesen, aber gegen euch Gurus bin ich ne kleine Null. Bin aber zufällig, alls ich versuchen wollte die Lösung eines Rätels in C++ umzusetzen auf etwas Interessantes draufgekommen und mir gedacht ich mach ein kleines Rätsel für euch daraus
Gesucht ist folgendes:
C++:
int wurzl(int c) { // hier die funktion return ergebnis;}
Die Funktion wurzl darf keine Libaries verwenden! par ist 150 (das hab ich geschafft gg)
Viel Spass
PS: Hoffe das gabs hier noch nicht
EDIT: * / und ^ sind natürlich nicht erlaubt Man darf nur + und - verwenden.
EDIT2: negative Zahlen müssen nicht berücksichtigt werden, und ganzzahlige Genauigkeit reicht. Das sollten jetzt alle Regeln sein Dieser Post wurde am 06.03.2007 um 10:58 Uhr von fasmat editiert.
C oder C++? Wird auf- oder abgerundet? -- main($)??<-$<='?'>>2?main($-!!putchar( (("$;99M?GD??(??/x0d??/a:???;a"+'?'/4) ??($??)+'?'/3-2-1+$%2)??''?')):'?';??>Dieser Post wurde am 06.03.2007 um 11:32 Uhr von kronos editiert.
@kronos: egal ob C oder C++ (meine Lösung ist in C), nachkomastellen werden abgeschnitten, meine lösung berücksichtigt nachkommastellen nicht, es wird automatisch die "abgerundete" lösung ausgegeben @guybrush: Quadratwurtzel
hab jetzt noch ein bisschen optimiert... komm auf 148.Dieser Post wurde am 06.03.2007 um 13:01 Uhr von fasmat editiert.
Naja hab nicht geglaubt, dass es so einfach ist ^^. Bin wie gesagt, nur zufällig darüber gestoßen, und dachte mir daraus könnte man ein rätsel machen. Könnte meine Lösung auch für Nachkommastellen anpassen, würde aber nicht mehr unter 150 kommen...
Naja hab eben auch nur mal kurz die Beschreibung der Wurzelberechnung bei Wikipedia überflogen und das einfachste schien mir das Näherungsverfahren zu sein wo man im Prinziep einfach ausprobiert.
Meine Lösung sieht erstmal so aus:
C++:
#include <stdio.h>
int wurzel(int c) { for(int i=1,j,s;i<c;i++){for(j=1,s=0;j<=i;j++)s+=i;if(s>c)break;}return --i; }
int main() { printf ("%i\n",wurzel(9876)); return0; }
Wenn man das jetzt auf Nachkommastellen ausweiten will wird es schon etwas komplizierter da man ja dann im Fall s>c nicht einfach aufhört sondern mit der nächst kleineren Stelle weiter probiert bis man soviel Stellen ermittelt hat wie man benötigt.
naja ich bins mit arrays angegangen... hab nicht daran gedacht auf wikipedia nachzuschaun gg
C++:
int func(int c) {bool *t;t=newbool[c];int i,k;for(i=0;i<c;i++)t[i]=1;for(i=1;i<c;i++){for(k=i;k<=c;k+=(i+1))t[k]=!t[k];}k=0;for(i=0;i<c;i++){if(t[i])k++;}return k;}
ja aber für ln und e würde man libaries brauchen oder? und potenzen waren ja auch nicht erlaubt...Dieser Post wurde am 06.03.2007 um 13:46 Uhr von fasmat editiert.