Поиск альтернативных алгоритмов
Ниже приведены те, которые я сделал, но которые были отмечены как неправильные онлайн-судьей на веб-сайте кодирования.
После объявления переменной с типом данных int k, я получил ввод из консоли с помощью cin(). Поскольку ограничения вопроса гласят, что возможное число (числа) находится в диапазоне от 1 до 20000, я сначала открыл цикл for, используя эти условия. На каждой итерации i (одна за другой) число проверяется, составляет ли сумма его цифр 10, и если да, то является ли это k-е число, сумма цифр которого равна 10.
Чтобы найти сумму цифр, я использовал либо рекурсивную функцию, либо итеративный метод с использованием цикла while. Отсюда и два фрагмента кодов. В обоих методах сумма вычисляется путем нахождения сначала цифр с использованием модульного оператора % и оператора деления /. Сумма вычисляется, а затем дополнительно проверяется, если она равна 10, и если да, она также проверяется, является ли это K-м элементом, путем подсчета всех предыдущих подобных элементов. После того, как все условия выполнены, только тогда значение i выводится с помощью cout().
#include <bits/stdc++.h>
using namespace std;
//recursion to get sum of digits.
*int sum(int d)
{
return d==0?0:d%10+sum(d/10);
}*
int main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
int t;
cin>>t;
while(t-- >0)
{
int k;
cin>>k;
for(int i=0;i<20000;i++)
{
int total=sum(i);
if(total==10)
{
--k;
if(k==0)
cout<<i<<"\n";
}
}
}
return 0;
}
Во-вторых, я использовал итерации (цикл while) для вывода суммы цифр
#include <bits/stdc++.h>
using namespace std;
int main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
int t;
cin>>t;
while(t-- >0)
{
int k;
cin>>k;
for(int i=0;i<20000;i++)
{
int sum=0,d=i;
*while(d!=0)
{
sum+=d%10;
d/=10;
}*
if(sum==10)
{
--k;
if(k==0)
cout<<i<<"\n";
}
}
}
return 0;
}
Поэтому мне нужны альтернативные алгоритмы большей эффективности. заранее спасибо
k
?), или это проблема эффективности (слишком медленно)? - person Damien   schedule 13.04.2021K
, а не к числу, которое нужно найти... - person Damien   schedule 13.04.2021