| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3555 人关注过本帖
标题:穷举法的一个实例
只看楼主 加入收藏
jianda999
Rank: 2
等 级:论坛游民
帖 子:8
专家分:33
注 册:2009-5-25
收藏
 问题点数:0 回复次数:4 
穷举法的一个实例
/*用1,2,3,...,9组成三个三位数abc,def和ghi,每个数字恰好出现一次,
  要求abc:def:ghi=1:2:3。按照"abc  def  ghi”的格式输出所有解,
  每行一个解*/
 
#include <stdio.h>
void main(void) {
    int i,j,k,d[10]; /*数组d用来存储0-9每个数字的出现次数,为了简化程序对0的出现次数依然进行统计*/
    for (i=123;i<=329;i++) { /*循环变量i穷举abc的合法取值*/
        k=1;
        for (j=0;j<=9;j++) d[j]=0; /*每次穷举验证前先初始化数组d*/
        while (k<=3) /*k取值范围1-3,依次求出k*i的各位数字出现次数*/
        {
            d[i*k%10]++;
            d[i*k/10%10]++;
            d[i*k/100]++;
            k++;
        }
        for (j=1;j<=9;j++) if (d[j]!=1) break; /*验证1-9每个数字是否都只出现一次*/
        if (j==10) printf("%6d%6d%6d\n",i,i*2,i*3);
    }
}
搜索更多相关主题的帖子: include 统计 
2015-05-26 21:10
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
error

[ 本帖最后由 do8do8do8 于 2015-5-27 14:14 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2015-05-27 11:59
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
https://bbs.bccn.net/viewthread.php?tid=441653&highlight=%CB%E3%B7%A8
早期做过的,再次附上我曾经写过的代码:
程序代码:
#include <stdio.h>
void main ()
{
    int i,j,a[9];
    for(i=123;i<333;i++)
    {
        for(j=0;j<9;j++)a[j]=0;
        for(j=i+i*2*1000+i*3*1000000;j>0;j=j/10)a[j%10-1]++;
        for(j=0;j<9;j++)if(a[j]!=1)break;
        if(j==9)printf("%d   %d   %d\n",i,i*2,i*3);
    }
} 



能编个毛线衣吗?
2015-05-27 13:19
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
#include <stdio.h>
#define N  9
void cls(int a[],int M)
{
   int k;
   for(k=0;k<M;k++)
     a[k]=0;
}
void main(void)
{
   int a[N];
   int i,j;
   int k1,k2,k3;
   for(i=123;i<329;i++)
  {
      cls(a,N);
      for(j=1;j<=3;j++)
       {
            k1=(i*j)/100;
            k2=(i*j)/10%10;
            k3=(i*j)%10;
            a[k1-1]++; a[k2-1]++;a[k3-1]++;
            if((a[k1-1]>1)||(a[k2-1]>1)||(a[k3-1]>1))  break;
       }
       if(j>3)  printf("%d    %d    %d\n",i,i*2,i*3);
   }
}

[ 本帖最后由 do8do8do8 于 2015-5-27 15:56 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2015-05-27 13:50
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
#include <stdio.h>    //预处理
#define N  9          //预处理
void cls(int a[],int M) //数组清零函数
{
   int k;
   for(k=0;k<M;k++)
     a[k]=0;
}
void main(void)        //主函数
{
   int a[N];
   int i,j;
   int k1,k2,k3;
   for(i=123;i<329;i++)
  {
      cls(a,N);
      for(j=1;j<=3;j++)
       {
            k1=(i*j)/100;
            k2=(i*j)/10%10;
            k3=(i*j)%10;
            a[k1-1]++; a[k2-1]++;a[k3-1]++;
            if((a[k1-1]>1)||(a[k2-1]>1)||(a[k3-1]>1))  break;  //判断
       }
       if(j>3)  printf("%d    %d    %d\n",i,i*2,i*3);
   }
}

[ 本帖最后由 do8do8do8 于 2015-5-27 15:56 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2015-05-27 15:51
快速回复:穷举法的一个实例
数据加载中...
 
   



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

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