首页 > 编程知识 正文

0到9数字相加不重复,0到9可以组成多少个不重复的三位数

时间:2023-05-05 20:37:13 阅读:282863 作者:3709

本题主要考察逻辑分析能力和耐心,一般能会粗暴使用低效的枚举法,即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五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。