不是家庭作业问题,我们还在学校学习循环 遇到编程挑战...... 的开始 数字666被认为是神秘的“野兽数” 并且是所有主要启示录主题大片电影中使用良好的数字。然而 数字666不能总是在脚本中使用,因此使用诸如1666之类的数字。让我们把至少包含三个连续六个的数字称为野兽 数字。前几个兽数是666,1666,2666, 3666,4666,5666 ......
鉴于基于1的索引n
,我的程序应该返回n
兽号。
定义
ApocalypseSomeday
getNth
int
int
int getNth(int n)
(确保您的方法是公开的)约束
n
将介于1
和10000
之间,包括实施例
老师不是问题。我在编程挑战C ++中找到了它。我到目前为止的进展
public class ApocalypseSomeday
{
public int getNth(int n)
{
int i = 0, j = 0,k = 0;
int s = 1,c = 1;
int r = 666;
while (s < n)
{
k = 0;
while ((c % 10000) == 6666 && s < n && k < 10000)
{
r = c * 10000 - 6000 + k;
k++;
s++;
}
答案 0 :(得分:1)
由于没有提到性能限制并且输入的大小非常小,最简单的选择是使用暴力:从1开始计数并检查每个数字以查看它是否包含666.当您找到{{1这样的数字,返回你找到的最后一个。
检查数字是否包含666的最简单(但很慢)的方法是将其转换为字符串并搜索子字符串'666'。同样,由于输入的大小有限且缺乏性能限制,这应该足够了。
使用算术运算进行此检查可能更快。在Python中你可以这样做:
n
如果您需要尽可能快地执行程序,则可以预先计算n的每个可能值的答案,并将答案硬编码到程序中。然后,您可以通过简单的索引操作找到任何n的结果。
答案 1 :(得分:0)
public class ApocalypseSomeday {
public int getNth(int n) {
int i = 0, j = 0,k = 0;
int s = 1,c = 1;
int r = 666;
while (s < n) {
k = 0;
while ((c % 10000) == 6666 && s < n && k < 10000) {
r = c * 10000 - 6000 + k;
k++;
s++;
}
if (s == n) return r;
if (k == 10000) {
c++;
continue;
}
k = 0;
while ((c % 1000) == 666 && s < n && k < 1000) {
r = c * 1000 + k;
k++;
s++;
}
if (s == n) return r;
if (k == 1000) {
c++;
continue;
}
k = 0;
while ((c % 100) == 66 && s < n && k < 100) {
r = c * 1000 + 600 + k;
k++;
s++;
}
if (s == n) return r;
if (k == 100) {
c++;
continue;
}
k = 0;
while ((c % 10) == 6 && s < n && k < 10) {
r = c * 1000 + 660 + k;
k++;
s++;
}
if (s == n) return r;
if (k == 10) {
c++;
continue;
}
r = c * 1000 + 666;
c++;
s++;
}
return r;
}
}
答案 2 :(得分:0)
class ApocalypseSomeday
{
public:
int getNth(int n)
{
int cpt = 0;
int nbr = 666;
while (cpt != n)
{
if (((nbr % 1000) == 666) )
{
//printf("nb[%d]:%d\n", cpt, nbr);
cpt++;
nbr++;
continue;
}
if ((nbr % 10000) - (nbr % 10) == 6660)
{
//printf("nb[%d]:%d\n", cpt, nbr);
cpt++;
nbr++;
continue;
}
if ((nbr % 100000) - (nbr % 100) == 66600)
{
//printf("nb[%d]:%d\n", cpt, nbr);
cpt++;
nbr++;
continue;
}
nbr++;
}
return nbr-1;
}
};