2016-07-23 8 views
-2

Ich möchte eine Funktion zu finden, eine Zahl ist ungerade oder gerade mit nur Inkrementieren oder Dekrementieren Funktion. keine andere Betreiber wie gleich oder modulare Operatormachen Funktion ist Nummer ist ungerade oder gerade

+1

was ist die Programmiersprache? !! –

+0

Verwenden Sie eine Schleife, subtrahieren Sie um 2 und sehen Sie, ob Sie mit 0 oder 1 enden. Oder versuchen Sie Rekursion, um das Gleiche zu tun. – PhillipXT

+0

Dekrementieren/inkrementieren Sie jedes Mal zweimal und wiederholen Sie, bis Sie mit 1 oder 0 enden. – Bergi

Antwort

0

Scheck so etwas wie dies mit% mod Betreiber

using System; 

class Program 
{ 
    static void Main() 
    { 
    for (int i = 0; i <= 100; i++) 
    { 
     if (IsOdd(i)) 
     { 
     Console.WriteLine(i); 
     } 
    } 
    } 

    public static bool IsOdd(int value) 
    { 
    return value % 2 != 0; 
    } 
} 
+0

M.qassas ich will Funktion, die nicht modular – Divayanshu

0

vielleicht

public bool isEven(int number){ 
    return number/2.0 == Convert.ToInt32(number/2.0) 
} 

Ich bin mir nicht ganz sicher, wie Sie eine Nummer zu testen beabsichtigen zu sein sogar ohne einen Gleich- oder Mod-Operator.

Lucas

1
def isOdd(n:Int) = { 
    if(n <= 1) n; 
    else isOdd(n - 2); 
} 

Dies wird wieder 1 oder 0 (wahr oder falsch), ob oder ob nicht die Anzahl n ungeradzahlig ist. Ich habe vergessen zu erwähnen, dass dieser Code in Scala ausführbar ist.

Es ist auch tail-rekursiv.

+0

verwenden Kann man die erste Zeile davon erklären – Divayanshu

+0

Definition einer Funktion namens isOdd mit dem n als ganze Zahl eingegeben. Der Rückgabetyp wird durch den impliziten Rückgabewert bestimmt. Grundsätzlich impliziere ich die Grundannahmen von Scala. – sascha10000

0

Vielleicht so etwas? Diese Lösung verwendet jedoch Zuweisungs- und logische Operatoren.

var isEven = true; 
function makeDivayanshusHomework (number) { 
    if (number < 0) { 
     for(i = 0; i < 2*number; i++) { 
      number++; 
     } 
    } 

    while (number > 0) { 
     number--; 
     isEven = isEven ? false : true; 
    } 

    return isEven; 
} 

edit: wie pro sascha10000 Kommentare, die Lösung ist unten vielleicht sogar etwas mehr funktional:

function makeDivayanshusHomework (number) { 
    if (Math.sqrt(number*number) > 1) { 
     return makeDivayanshusHomework(number-2) 
    } 
    else { 
     return Math.sqrt(number*number); // 1 when odd, 0 otherwise 
    } 
} 

, die mich ursprünglich Antwort der bringt fast zu sascha10000, obwohl diese Methode graziös negative ganze Zahlen behandelt. Hat Ihr Lehrer angegeben, in welchem ​​Umfang die Eingabe bereinigt werden muss?

+1

Haha awesome Funktionsname. Ich weiß, das ist kein sinnvoller Kommentar. Aber es war zu lustig, um es nicht zu kommentieren. Aber das ist nicht funktional. Sie mutieren Variablen, die nicht erlaubt sind. – sascha10000

+1

Es ist immer noch nicht funktional, weil ++ - sind Postfix Dekremente/Inkremente, die zu Nummer = Zahl + 1 oder Nummer = Nummer + 1 => immer noch die Variablen mutiert. Daher ist es nicht funktional, dass Sie anstelle von Variablen Konstanten verwenden müssen. Daher würden Sie Rekursion für Ihren Ansatz verwenden. – sascha10000

Verwandte Themen