【发布时间】:2021-07-08 08:49:48
【问题描述】:
寻找替代算法
以下是我制作的,但在编码网站上被在线法官标记为不正确。
在声明了int数据类型k的变量后,l收到了一个输入 从控制台使用 cin()。 由于问题的约束表明可能的数字是 在 1 到 20000 之间,我首先使用这些条件打开了一个 for 循环。 在 i 的每次迭代中(一个接一个),测试该数字的位数是否相加 到 10,如果是,它是否是第 k 个数字的总和为 10。
为了找到数字的总和,我使用了递归函数或使用 while 循环的迭代方法。 因此有两个sn-ps代码。在这两种方法中,总和是通过首先使用模 % 运算符和除法运算符 / 找到数字来计算的。计算出总和,然后进一步测试它是否等于 10,如果是,还通过保持所有先前相似元素的计数来测试它是否是第 K 个元素。满足所有条件后,才使用 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的值?),还是效率问题(太慢了)? -
我在两种实现情况下都得到了正确的值。但我与在线法官合作,此代码在其他编译器上运行时没有时间限制错误。只是我使用的算法可能被认为是不正确的(由在线法官)
-
请注意,一旦获得并打印出正确答案,您应该退出循环(或返回)。
-
好的,请注意。让我编辑我的代码,以应对可能因退出循环(返回)而受到影响的另一种情况。不仅有1个测试用例,而且有多个测试用例。这些变量是 t。
-
您可以提供问题的链接。
标签: algorithm recursion while-loop sum digits