c++数组的简单应用

问题:
1~9 组成三个 3 位的平方数将 1、2、3、4、5、6、7、8、9 九个数字分成三组,每个数字只能用一次,即每组三个数不允许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数。

解题思路:
这是解决这个问题的一种简单快速的算法。
首先求出三位数中不包含 0 且是某个整数平方的三位数,这样的三位数是不多的,将其存放到数
组 a 中。然后将满足条件的三位数进行组合,使得所选出的 3 个三位数的 9 个数字没有重复。

#include <iostream>
using namespace std;
int main()
{
    int a[20],b[10],num; //a:存放满足条件的三位数
    int i,j,k,m,n,s,flag;
    int d,e,f;//分别代表百、十、个位数
    cout<<"有不同数字的 3 个平方数有:\n";
    for(num=0,i=11;i<=31;i++) /*求出是平方数的三位数*/
    if(i%10!=0) //若不是 10 的倍数,则分解三位数
    {
        k=i*i; //分解该三位数中的每一个数字
        d=k/100; //百位
        e=k/10%10; //十位
        f=k%10; //个位
        if(!(d==e||d==f||e==f)) //若分解的三位数字均不相等
        a[++num]=k; //n:计数器,统计已找到的满足要求的三位数
    }
    //共有 num 个三位数字均不相等的数保存在 a[1]~a[num]中
    for(i=1;i<=num-2;++i) //从满足条件的三位数中选出三个进行组合
    {
        b[1]=a[i]/100;
        b[2]=a[i]/10%10;
        b[3]=a[i]%10;
        for(j=i+1;j<=num-1;++j)
        {
            b[4]=a[j]/100; //取第 j 个数的三位数字
            b[5]=a[j]/10%10;
            b[6]=a[j]%10;
            for(k=j+1;k<=num;k++)
            {
                b[7]=a[k]/100; //取第 k 个数的三位数字
                b[8]=a[k]/10%10;
                b[9]=a[k]%10;
                flag=0; //若 flag 为 1,表示当前 a[i],a[j],a[k]中出现了相同的数字
                for(m=1;!flag&&m<=3;m++) //a[i],a[j],a[k]中的三个数字中是否含有相同的数字
                    for(n=4;!flag&&n<=6;n++)
                        for(s=7;!flag&&s<=9;s++)
                            if(b[m]==b[n]||b[n]==b[s]||b[s]==b[m])
                                flag=1;
                if(!flag) /*若均不重复则打印结果*/
                    cout<<a[i]<<','<<a[j]<<','<<a[k]<<endl;
            }
        }
    }
    system("pause");
    return 0;
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_33460865/article/details/82662302