Итак, мой вопрос заключается в том, как эффективно писать программу, в которой мы можем принимать несколько входов (количество вводимых данных определяется пользователем), а затем дают выходы сразу. Рассмотрим программу, которая дает сумму ее цифр. Например - 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;
}
Эти коды я мог думать. Первый - простой, который принимает вход и затем выдает результат. Во втором я попытался использовать динамическое распределение памяти, но программа дает ошибку. (Я знаю, что я не использовал правильное использование * и &, но я уже пробовал использовать его разными способами и не смог). Третья программа успешна, но поскольку мы устанавливаем большое значение ограничения для массива (i.e int Ans [1000]), это делает программу немного неэффективной.
Итак, мой вопрос заключается в том, как бы динамически распределить память во время выполнения, чтобы выполнить несколько входов, а затем дать сразу несколько выходов.
* Пожалуйста, отправьте код в этом сообщении. Ссылки умирают и обычно не приглашают тех, кто пытается помочь. – owacoder
@Mr_Feynman Если это фактическое форматирование кода, я понимаю вашу борьбу. – LogicStuff
@Mr_Feynman Что такое 'int * AnsTemp;' во втором примере? Вы используете его как массив? № – LogicStuff