将0到9这十个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3

新手上路,请多包涵

题目:将0到9这十个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3

代码

个人思路:
①由于第一个数最小值是123,最大是333.因此,第二三个数最小分别是246和369.故i j k的初值就分别是123 246和369
②由于三个三位数共9个数字不能重复,故设一个二维数组记录该数是否被访问过,初值为0,访问过为1;

//#include <stdio.h>
#include <math.h>
int main()
{

int q[2][10] = {0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0,0};
int i, j, k; //代表题目要求的三个三位数
int a, b, c, d, e, f, g, h, m; //9个数字代表数组下标,记录某数字是否已被访问过
for (i = 123; i < 334; i++) {
    a = i / 100;
    b = (i / 10) % 10;
    c = i % 10;
    q[1][a] = 1;
    q[1][b] = 1;
    q[1][c] = 1;
    for (j = 246; j < 1000; j++) {
        d = j / 100;
        e = (j / 10) % 10;
        f = j % 10;
        if ((q[1][d] == 0) && (q[1][e] == 0) && (q[1][f] == 0)) {
            q[1][d] = 1;
            q[1][e] = 1;
            q[1][f] = 1;
            for (k = 369; k < 1000; k++) {
                g = k / 100;
                h = (k / 10) % 10;
                m = k % 10;
                if ((q[1][g] == 0) && (q[1][h] == 0) && (q[1][m] == 0)) {
                    q[1][g] = 1;
                    q[1][h] = 1;
                    q[1][m] = 1;
                    if ((i == 2 * j) && (i == 3 * k))
                        printf("%d,%d,%d\n", i, j, k);
                }
            }
        }
    }
}

}

运行后没有结果,请问这段代码哪里有问题?

阅读 8k
2 个回答
// javascript
for(let n=329; n>=102; n--)
{
    n2 = n*2;
    n3 = n*3;
    
    let found = true;
    let arr = (''+n+n2+n3).split('').sort();
    for(let i=1; i<arr.length; i++)
    {
        if(arr[i] === arr[i-1])
        {
            found = false;
        }
    }
    if(found === true)
    {
        console.log('Found', n,n2,n3);
        break;
    }
}

Found 327 654 981

新手上路,请多包涵

include <stdio.h>

int main(){

int a, b, c, n[9];
for(int a=120;a<=329;a++)
{
    b = a*2;
    c = a*3;
    n[0] = a/100, n[1] = a/10%10, n[2] = a%10;
    n[3] = b/100, n[4] = b/10%10, n[5] = b%10;
    n[6] = c/100, n[7] = c/10%10, n[8] = c%10;
    for(int i=0;i<8;i++)
    {    
        for(int j=i+1;j<9;j++)
        {
             if(n[i] == n[j])
            {
                goto out;
            }         
        }
    }
    printf("%d,%d,%d\n",a,b,c);
    out: ;     
} 
    
return 0;

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进