用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现

来源:学生作业帮助网 编辑:作业帮 时间:2018/06/21 08:34:30
用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3

用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现
用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现

用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现
做出来了,不过我是用C写的,你应该可以改成C++的吧,主要还是思路,讲解一下我的思路吧:


如果用排列组合的话,工作量肯定很大,我们可以反过来想,假设有第一个数,那么我们可以求出第二个数和第三个数,然后计算这三个数中所有位上的数字的个数,统计下,看是否从1-9都使用了一遍,如果是,那么这三个数就是要求的,否则接着找.


第一个数怎么就有了呢,很简单,既然是三位数,我们从100开始循环就行了,直到999;不过仔细想想,其实不用循环到999,因为到333的时候,第三个数刚好是999,334的时候第三个数就不是三位数了.因此第一个数从100循环到333就可以了.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main()
{
    int i, j, k, flag;
    int num1, num2, num3, n1, n2, n3;//分别表示第一个数、第二个数和第三个数
    int s[12];                       //记录数字的个数

    //只需要循环333次就够了,接着往下循环的话,第三个数就超过1000了
    for(i=100; i<=333; i++)
    {
        //将数组a的值全部置为0
        for(j=0; j<10; j++)
        {
            s[j] = 0;
        }
        flag = 1;

        n1 = num1 = i;
        n2 = num2 = i*2;
        n3 = num3 = i*3;

        //一下三个while循环是统计各个位上数字的个数
        while(num1)
        {
            k = num1%10;
            s[k]++;
            num1 /= 10;
        }
        while(num2)
        {
            k = num2%10;
            s[k]++;
            num2 /= 10;
        }
        while(num3)
        {
            k = num3%10;
            s[k]++;
            num3 /= 10;
        }

        //判断1-9的使用情况,如果一个数使用多次或一次也没使用,表示不符合要求
        for(j=1; j<10; j++)
        {
            if(s[j]>=2 || s[j]==0)
            {
                flag = 0;
                break;
            }
        }
        if(flag == 1)
        {
            printf("%-5d%-5d%-d\n", n1, n2, n3);
        }

    }

    return 0;
}

1-9这九个数字各用一次,组成三个三位数.如果这三个三位数都被9整除,这三个三位数的最大和是多少? 9这九个数字各用一次,组成三个三位数,如果三个三位数都能被9整除,这三个三位数最大是多少? 用123456789这九个数字组成三个三位数 使他们的和等于1998 1—9共九个数字,组成三个三位数,并且两个数字加起来的和为第三个数字,求这三个数字分别是多少? 用1---9九个数码组成三个三位数,要求第二个数,第三个数分别是第一个数的2倍和3倍,一共有几组?就只用九个数字组成三个三位数,不能重复使用数字 将1~9这九个数字组成三个三位数,使它们的乘积最小,则这三个数分别是几? 1,2,3,4,5,6,7,8,9这九个数组成三个三位数(每个数字只能用一次)这三个三位数之和最大是多少? 用0、1、2、3、4、5、6、7、8、9这九个数字组成一个加法竖式(三个三位数相加等于一个四位数) 用1、2、3、4、5、6、7、8、9这九个数字组成三个三位数,使它们的和等于1998 用0至9这九个数字,组成一道加法算式.要求是三位数加上三位数等于一个四位数. 用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现 用1到9这九个数字组成三个3位数(每个数都要用),每个数都是4的倍数,这三个三位数中最小的哪个三位数是 用1--9九个数字组成三个三位数,使其中最大的三位数被3除余2,且尽可能小,次大的三位数被3除余1,最小三位数能被3整除,那么最大三位数是多少? 用1-9这九个数字组成数字不重复的三个三位数,第二个数是第一个数的二倍,第三个是第一个数的三倍,有哪些 你能把1至9这九个数字组成一个三位数减三位数,差等于三位数的算式吗 你能把1至9这九个数字组成一个三位数减三位数,差等于三位数的算式吗 你能把1至9这九个数字组成一个三位数减三位数,差等于三位数的算式吗 从1到9这九个数字中选出三个,用这三个数可组成6个不同的三位数.若将这6个三位数中的五个三位数相加,其和是2003,那么剩下的一个三位数是多少?