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