数字124具有这样的属性:它是最小的数字,其前三个数字包含数字2.观察它 124 * 1 = 124,124 * 2 = 248,124 * 3 = 372且124,248和372各包含数字2.可以将此属性概括为最小数字,其前n个倍数各自包含数字2.编写一个名为smallest(n)的函数,它返回前n个倍数包含数字2的最小数字。提示:使用模10来算术来检查数字。
它的签名是 int smallest(int n)
实例 如果n是返回因为 4 624因为624的前四个倍数是624,1248,1872,2496并且它们都包含 数字2.此外,624是最小的数字,其前四个倍数包含数字2。 5 624因为624的前五个倍数是624,1248,1872,2496,3120。注意624也是 前4个倍数包含数字2的最小数字。 6 642因为642的前五个倍数是642,1284,1926,2568,3210,3852 7 4062因为4062的前五个倍数是4062,8124,12186,16248,20310,24372,28434。 注意,其中一个倍数可以多次包含数字2(例如,24372)。
我试图通过这种方式解决这个问题
//Its a incomplete code
public static int smallest(int n)
{
int i = 1;
for (; ; )
{
int temp = 0;
int myNum = 0;
for (int j = 1; j <= n; j++)
{
myNum = i * j;
//check for condition
}
//if condition ture break
}
}
但是我坚持这个问题是我无法创建n次变量的硬编码..你能帮助我继续吗?
您可以假设这样的数字可以在32位机器上计算,即您不必在答案中检测整数溢出。
答案 0 :(得分:0)
public static int smallest(int n)
{
int i = 1;
for (; ; )
{
int contain = 0;
int temp = 0;
int myNum = 0;
for (int j = 1; j <= n; j++)
{
myNum = i * j;
temp = myNum;
while (true)
{
if (temp % 10 == 2)
{
contain++;
break;
}
temp = temp / 10;
if (temp <= 0)
break;
}
}
if (contain == n)
break;
i++;
}
return i;
}
答案 1 :(得分:0)
numberOfRowsInSection
答案 2 :(得分:0)
// Function smallest n
public int smallest(int a)
{
int temp = 0, holder = 0, k = 0;
if (a <= 0) return 0;
else
{
for (int i = 100; i < Int16.MaxValue; i++)
{
int count = 0;
k = 0;
int[] array = new int[a];
for (int j = 1; j < 9; j++)
{
holder = i * j;
temp = holder;
while (temp > 0)
{
int rem = temp % 10;
if (rem == 2)
{
count++;
if (k < a)
{
array[k] = j;
k++;
break;
}
}
temp /= 10;
}
if (count == a)
{
int countTemp = 0;
for (int h = 0; h < a; h++)
{
if (h + 1 < a)
{
if (array[h + 1] == array[h] + 1 && array[0] == 1 && array[h] > 0)
{
countTemp++;
if (countTemp == a - 1)
return i;
}
}
}
}
}
}
}
return 0;
}