本题主要考察逻辑分析能力和耐心,一般能会粗暴使用低效的枚举法,即3个关于i,j,k的for循环一个个判断。
1)数字不重复,i最小数字是123,k最大数字是987,i*3<=987,即i最大数字329 ,需要循环329-123=206次
2)当i=num, j=2num,k=3num,判断123456789是否都用到了。
void Start () {
int i, j, k;
int[] visit = new int[10];
for (i = 123; i <= 329; i++)
{
for (int p = 0; p < visit.Length; p++) visit[p] = 0;
visit[i / 100] = 1;
int charNum = i / 10 % 10; //取i的十位字符
if (charNum!=0&&visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = i % 10; //取i的个位字符
if (charNum != 0&&visit[charNum] == 0)
visit[charNum] = 1;
else continue;
j = i * 2;
charNum = j / 100; //取j的百位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = j / 10 % 10; //取j的十位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = j % 10; //取j的个位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
k = i * 3;
charNum = k / 100; //取k的百位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = k / 10 % 10; //取k的十位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = k % 10; //取k的个位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
Debug.Log(k+"\t"+ j+"\t"+ i); //代码能够执行到这里说明i : j : k=1:2:3,且123456789都被用到了
}
1)数字不重复,i最小数字是123,k最大数字是987,i*3<=987,即i最大数字329 ,需要循环329-123=206次
2)当i=num, j=2num,k=3num,判断123456789是否都用到了。
void Start () {
int i, j, k;
int[] visit = new int[10];
for (i = 123; i <= 329; i++)
{
for (int p = 0; p < visit.Length; p++) visit[p] = 0;
visit[i / 100] = 1;
int charNum = i / 10 % 10; //取i的十位字符
if (charNum!=0&&visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = i % 10; //取i的个位字符
if (charNum != 0&&visit[charNum] == 0)
visit[charNum] = 1;
else continue;
j = i * 2;
charNum = j / 100; //取j的百位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = j / 10 % 10; //取j的十位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = j % 10; //取j的个位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
k = i * 3;
charNum = k / 100; //取k的百位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = k / 10 % 10; //取k的十位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
charNum = k % 10; //取k的个位字符
if (charNum != 0 && visit[charNum] == 0)
visit[charNum] = 1;
else continue;
Debug.Log(k+"\t"+ j+"\t"+ i); //代码能够执行到这里说明i : j : k=1:2:3,且123456789都被用到了
}