一次接收多个输入,然后立即输出输出

时间:2015-10-10 20:59:52

标签: c++ memory dynamic allocation

所以我的问题是如何有效地编写一个程序,我们可以在这里输入多个输入(给定的输入量由用户决定),然后立即给出输出。让我们考虑一个给出它的数字之和的程序。例如 - 12345 = 15.

//Single input single output 
#include <iostream>

using namespace std;

int main()
{
    int T, N;
    cout << "Enter the value of T (No. of test cases)" << endl;
    cin >> T;
    cout << "Enter the value of N : " << endl;
    while (T > 0)
    {
        cin >> N;

        int ans = 0,temp1,temp2;
        while(N!=0)
        {
            temp1= N %10;
            N = (N - temp1)/10;
            ans = ans + temp1;
        }
        cout << ans << endl;
        T--;
    }

    return 0;
}
// Taking in all inputs then giving out all outputs ( Not working properly)

#include <iostream>

using namespace std;
int SumCal(int Number, int TestCase, int t);
int main()
{
    int N, T;

    cout << " Enter the value of T ( Total number of test cases) " << endl;
    cin >> T;
    int *Ans(new int[T]);
    if (T >= 1 && T <= 1000)
    {
        cout << "Enter the value of N" << endl;
        for (int i = 1; i <= T; i++)
        {
            cin >> N;
            if (N >= 1 && N <= 100000)
                Ans[i] = SumCal(N, i, T);
        }
    }

    for (int z = 1; z <= T; z++)
    {
        cout << Ans[z] << endl;
    }


    delete[] Ans;
    return 0;
}

int SumCal(int Number, int TestCase, int t)
{
    int temp1, temp2 = 0;
    int *AnsTemp(new int[t]);

    temp1 = Number % 10;

    temp2 = Number / 10;
    if (temp2 < 10 && temp2 > 0)
        AnsTemp[TestCase] = (temp1 + temp2);


    while (temp2 > 10)
    {
        AnsTemp[TestCase] = (AnsTemp[TestCase] + temp1);
        temp2 = temp2 / 10;
        temp1 = temp1 % 10;
    }

    return AnsTemp[TestCase];
    delete[] AnsTemp;
}
// This will work properly for multiple inputs multiple outputs

#include <iostream>

using namespace std;
int SumCal(int Number, int TestCase);
int main()
{
    int N, T;

    cout << " Enter the value of T ( Total number of test cases) " << endl;
    cin >> T;
    int Ans[1000] = {};
    if (T >= 1 && T <= 1000)
    {
        cout << "Enter the value of N" << endl;
        for (int i = 1; i <= T; i++)
        {
            cin >> N;
            if (N >= 1 && N <= 100000)
                Ans[i] = SumCal(N, i);
        }
    }

    for (int z = 1; z <= T; z++)
    {
        cout << Ans[z] << endl;
    }

    return 0;
}

int SumCal(int Number, int TestCase)
{
    int temp1, temp2 = 0;
    int ans;

    temp1 = Number % 10;

    temp2 = Number / 10;
    if (temp2 < 10 && temp2 > 0)
        ans = (temp1 + temp2);

    while (temp2 > 10)
    {
        ans = (ans + temp1);
        temp2 = temp2 / 10;
        temp1 = temp2 % 10;
    }

    return ans;
}

这些是我能想到的代码。第一个是一个简单的,它接受一个输入,然后给出一个输出。在第二个我试图使用动态内存分配,但程序给出错误。 (我知道我没有正确使用*和&amp; in但我已经尝试过以各种方式使用它而失败了)。第三个程序是成功的,但是当我们为数组设置一个大的约束值时(即int Ans [1000]),它使程序效率低下。

所以我的问题是如何在运行时成功动态分配内存以接收多个输入,然后一次提供多个输出。

1 个答案:

答案 0 :(得分:0)

使用代码非常困难。我刚刚接受了第一个例子,最小化了代码并做了你应该做的事情:

#include <iostream>

using std::cout;
using std::endl;
using std::cin;

int main()
{
    int T;
    cout << "Enter the value of T (No. of test cases)" << endl;
    cin >> T;
    int *buf = new int[T]();              // buffer to hold the answers

    for(int i = 0; i < T; ++i)
    {
        int N;
        cout << "Enter the value of N : " << endl;
        cin >> N;

        while(N)
        {
            buf[i] += N % 10;             // calculate on the buffer element
            N /= 10;
        }
    }

    for(int i = 0; i < T; ++i)
        cout << buf[i] << endl;           // print the buffer

    delete [] buf;                        // delete buffer
    return 0;
}

在这里管理动态分配的数组没什么用处,但请看一下std::vector及其用途。