| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1822 人关注过本帖
标题:一道题,帮忙看下我的程序为啥输出结果。
只看楼主 加入收藏
yuyu12409
Rank: 2
等 级:论坛游民
帖 子:9
专家分:46
注 册:2017-3-12
结帖率:100%
收藏
 问题点数:0 回复次数:4 
一道题,帮忙看下我的程序为啥输出结果。
题目:

凑算式

     B      DEF
A + --- + ------- = 10
     C      GHI
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?
代码:
#include<iostream>
using namespace std;
int main()
{
    int a[9];//a[0]到a[8] 分别为A到I;
    int i,m,j;
    int sum=0;
    double s;
    for(a[0]=1;a[0]<=9;a[0]++)
    {
         for(a[1]=1;a[1]<=9;a[1]++)
         {
              for(a[2]=1;a[2]<=9;a[2]++)
              {
                   for(a[3]=1;a[3]<=9;a[3]++)
                   {
                        for(a[4]=1;a[4]<=9;a[4]++)
                        {
                             for(a[5]=1;a[5]<=9;a[5]++)
                             {
                                for(a[6]=1;a[6]<=9;a[6]++)
                                {
                                  for(a[7]=1;a[7]<=9;a[7]++)
                                  {
                                       for(a[8]=1;a[8]<=9;a[8]++)
                                       {
                                           s=a[0]+a[1]/(double)a[2]+(a[3]*100+a[4]*10+a[5])/(double)(a[6]*100+a[7]*10+a[8]);
                                           if(s==10)
                                           {
                                               for(i=0;i<8;i++)
                                               {
                                                   m=1;
                                                   for(j=i+1;j<9;j++)
                                                   {
                                                       if(a[i]==a[j])
                                                          {
                                                           m=0;
                                                           continue;
                                                          }
                                                   }
                                               }
                                               if(m)
                                                   sum++;
                                           }

                                       }
                                  }
                             }
                        }
                   }
              }
         }
    }
    }
    cout<<sum<<endl;
}
大神帮忙看下,谢谢。
搜索更多相关主题的帖子: include double 字母 
2017-03-21 17:34
snowly
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-3-21
收藏
得分:0 
哇,你这十一重循环。
2017-03-21 19:34
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
//看不出来这解还真不少
#include<iostream>
using namespace std;
short a[9];bool flag[9];
void Trav(short lo,short hi)
{
    for(short i=1;i<=9;i++)
    {
        if(!flag[i-1])
        {
            a[lo]+=i;
            flag[i-1]=true;
            if(lo<hi) Trav(lo+1,hi);
            else
            {
                if(a[0]+(double)a[1]/a[2]+(double)(100*a[3]+10*a[4]+a[5])/(100*a[6]+10*a[7]+a[8])==10.00)
                    cout<<a[0]<<"+"<<a[1]<<"/"<<a[2]<<"+"<<a[3]<<a[4]<<a[5]<<"/"<<a[6]<<a[7]<<a[8]<<endl;
            }
            a[lo]-=i;
            flag[i-1]=false;
        }
    }
}
int main()
{
    memset(flag,false,sizeof(bool)*9);
    memset(a,0,sizeof(short)*9);
    Trav(0,8);
    return 0;
}
2017-03-21 20:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
C++ 有 next_permutation 算法

程序代码:
#include <iostream>
#include <algorithm>
using namespace std;

int main( void )
{
    unsigned a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    do {
        unsigned A = a[0];
        unsigned B = a[1];
        unsigned C = a[2];
        unsigned DEF = a[3]*100+a[4]*10+a[5];
        unsigned GHI = a[6]*100+a[7]*10+a[8];

        if( (GHI*B+DEF*C)%(GHI*C)==0 && A+(GHI*B+DEF*C)/(GHI*C)==10 )
        {
            cout << A << " + " << B << '/' << C << " + " << DEF << '/' << GHI << " = 10\n";
        }
    }
    while( next_permutation(a,a+sizeof(a)/sizeof(*a)) );
    // 支持C++11标准可写成 while( next_permutation(begin(a),end(a)) )

    return 0;
}

2017-03-22 08:55
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 4楼 rjsp
原来全排列有现成算法。不错,学习了。
2017-03-22 13:16
快速回复:一道题,帮忙看下我的程序为啥输出结果。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016819 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved