C++ :: Aufgabe #250 :: Lösung #1

1 Lösung Lösung öffentlich
#250

Ägyptische Bruchrechnung

Fortgeschrittener - C++ von hollst - 22.12.2019 um 22:50 Uhr
Gegeben seien zwei positive Ganzzahlen Z (wie Zaehler) und N (wie Nenner) mit N > Z
und Z sei kein Teiler von N.

Der Bruch Z/N ist immer als Summe der Kehrwerte positiver Ganzzahlen (Stammbrüche) darstellbar,
wobei es meist mehrer Möglichkeiten der Darstellung gibt.

Beispiele:

5/6 = 1/2 + 1/3 = 1/2 + 1/4 + 1/12 = 1/2 + 1/4 + 1/13 + 1/156 = ...

17/39 = 1/3 + 1/10 + 1/390 = ...

Man schreibe ein Programm, das Z und N entgegennimmt und die Zahlen der Stammbrüchesumme mit den wenigsten Summanden ausgibt.

Also obere Beispiele:

Input 5 und 6, Output 2 und 3,
Input 17 und 39, Output 3, 10 und 390.

Viel Spaß.
#1
vote_ok
von TestUser (60 Punkte) - 05.03.2020 um 01:08 Uhr
Quellcode ausblenden C-Code
#include <iostream>

using namespace std;


int func(int Z, int N, int *arr, int init_Z, int init_N)
{
    int counter = 1;
    int tmp = Z;
    static int function_count = 0;
    
    while (Z <= N)
    {
        Z+=tmp;
        counter++;
    }
    
    arr[function_count]=counter;

    
    int new_Z = Z*tmp - N*tmp;
    int new_N = Z*N;
    
    
    if (new_N%new_Z == 0)
    {
        arr[++function_count] = new_N/new_Z;
        
        cout << "Your given fraction can be expressed as followed: \n" 
             << init_Z << "/" << init_N <<" = ";
        
        for(int i = 0; i <= function_count; i++)
        {
            cout << "1/" << arr[i];
            
            if(i != function_count)
            {
                cout << " + ";
            }
        }
        
        cout << endl;
    }
    
    else
    {
        function_count++;
        func(new_Z,new_N, arr, init_Z, init_N);
    }
    
    return 0;
}

int main()
{
    int Z;
    int N;
    int arr[50];
    cout << "Welcome to the Egyptian-fraction-Calculator!" << endl;
    cout << "Enter Counter:" << endl;
    cin >> Z;
    cout << "Enter Denominator:" << endl;
    cin >> N;
    
    func(Z,N, arr, Z, N);
    
   return 0;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1801069

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.