62 Stimmen

Kniffliges Interviewthema für C++

Wie würden Sie den folgenden Code erstellen/implementieren, damit SR.h die richtige Ausgabe OHNE Sternchen in Ihrer Lösung erzeugt?

Diese Frage hat mich genervt. Ich würde gerne einige der verschiedenen Ansätze kennen, die Menschen für dieses Problem verwenden.

#include <cstdio>
#include "SR.h"

int main()
{
    int j = 5;
    int a[] = {10, 15};
    {
        SR x(j), y(a[0]), z(a[1]);

        j = a[0];
        a[0] = a[1];
        a[1] = j;

        printf("j = %d, a = {%d, %d}\n", j, a[0], a[1]);
    }

    printf("j = %d, a = {%d, %d}\n", j, a[0], a[1]);
}

Ausgabe:

j = 10, a = {15, 10}
j = 5, a = {10, 15}

Die zweite:

#include <cstdio>
#include "SR.h"
int main()
{
    int sum = 0;
    for (int i = 1; i < 100; i++) {
        SR ii(i);
        while (i--)
            sum += i;
    }
    printf("sum = %d\n", sum);
}

//The output is "sum = 161700".

11 Stimmen

Warum sollte das keine echte Frage sein? Übersehe ich etwas?

4 Stimmen

@sbi Interviewfragen, insbesondere künstliche, sind in der Regel nicht "echt". Nicht, dass ich diese Frage selbst heruntergestimmt oder knapp bewertet hätte.

0 Stimmen

Ich bin auch unsicher, was die negative Abstimmung angeht. Vielleicht müssen die Leute heutzutage schnell sein.

0voto

Lazer Punkte 84831

Eine Lösung für #2 ist:

#define _SR_H_

int count = 0;

class SR {
private:
    int& ref;
public:
    SR(int& val) : ref(val) {
        count++;
    }
    ~SR() {
        if (count == (161700 + 1)) {
            ref = 100;
        } else {
            ref = 1;
        }
    }
};

#endif

Ich weiß, dass diese Lösung etwas hässlich ist, und sie führt die for Schleife 161700 Mal, um die Zahlen zu addieren. Dies würde für jede beliebige Zahl funktionieren, aber ich bin mir nicht sicher, warum 161700 gewählt wurde. Sie lässt sich auch nicht gut faktorisieren.

0 Stimmen

Diese "Antwort" sollte gelöscht werden, da sie völlig irreführend ist. Die gleiche SRT-Klasse funktioniert auch hier. Der Effekt ist so, als hätte man int k=i, while (k--) sum += k; Das Gleiche gilt für die untere, die sich als "speziell für #2" bezeichnet.

-1voto

luck Punkte 165

Sehr sehr hässliche Antwort auf die zweite Frage ==>

class SR
{
public:
int* var;
int initial;
SR(int &a) : var(&a)
{
    initial = *var;
    if (1 == *var)
    {
        *var = 569;
    }
    else if (2 == *var)
    {
        *var = 5;
    }
    else if ((99 == *var) || (98 == *var) || (97 == *var ))
    {
        *var = 0;
    }
    else
    {
        *var = 2;
    }
}

~SR()
{
        *var = initial;
}
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X