1,问题提出 日本数学家桥本吉彦教授于1993年10月在我国山东举行的中日美三国数学教育研讨会上向与会者提出以下填数趣题: 把1,2,...,9这9个数字填入下式的九个方格中(数字不得重复),使下面的分数等式成立

桥本教授当即给出了一个解答。这一分数式填数趣题究竟共有多少个解答? 试求出所有解答。(等式左边两个分数交换次序只算一个解答)。

2,回溯算法设计
设置a数组,式中每一□位置用一个数组元素来表示 .
为判断数字是否重复,设置中间变量g:若出现某两数字相同(即a(i)=a(k))或a(1)>a(4),则赋值g=0(重复标记)。
首先从a(1)=1开始,逐步给a(i)(1≤i≤9)赋值,每一个a(i)赋值从1开始递增至9。直至a(9)赋值,判断:
若i=9,g=1,等式同时满足,则为一组解,用n统计解的个数后,格式打印输出这组解。
若i<9 且g=1,表明还不到九个数字,则下一个a(i)从1开始赋值继续。
若a(9)=9 ,则返回前一个数组元素a(8)增1 赋值(此时,a(9)又从1开始)再试。若a(8)=9 ,则返回前一个数组元素a(7)增1 赋值再试。
依此类推,直到a(1)=9时,已无法返回,意味着已全部试毕,求解结束。

3,代码实现

 #include <stdio.h>
#include <stdlib.h> int main()
{
int flag;//设置标志位
int k,i,sum,x,y,z;
int a[];
i=;
a[i]=;//附初始值
sum=;//记录解得个数
while()
{
flag=;
for(k=i-;k>=;k--)
{
if(a[k]==a[i])
{
flag=;//不满足条件,改变标志位
}
}
if(flag&&i==)//得到一组解,输出
{
sum++;
x=a[]*+a[];
y=a[]*+a[];
z=a[]*+a[];
if((x*a[]*a[]+y*a[]*a[])==(z*a[]*a[]))
{
printf("first1:%d%d/%d+%d%d/%d=%d%d/%d\n",a[],a[],a[],a[],a[],a[],a[],a[],a[]);
printf("first2:%d/%d+%d/%d=%d/%d",x,a[],y,a[],z,a[]);
printf("\n");
}
}
if(flag&&i<)
{
i++;
a[i]=;
continue;
}
while(a[i]==&&i>)i--;//回溯
if(a[i]==&&i==)
{
break;
}
else
{
a[i]++;//寻找下一条路径
}
}
printf("The sum is %d",sum);
return ;
}

运行结果:

4,说明

上面代码实现的是题目要求的颠倒,即上面是两个空,下面是一个空,要实现题目要求,只需将将x,y,z改变一下即可。

另外如果左面的两个数次序颠倒算一次的话,只需在约束条件中增加一个条件即可:a[1]>a[4];

C语言-回溯例4的更多相关文章

  1. C语言-回溯例3

    排列问题 1.实现排列A(n,m)对指定的正整数m,n(约定1<m<=n),具体实现排列A(n,m).2. 回溯算法设计设置一维数组a,a(i)(i=1,2,…,m)在1—n中取值.首先从 ...

  2. C语言-回溯例1

    回溯法解N皇后问题 1,代码分析: 使用一个一维数组表示皇后的位置 其中数组的下标表示皇后所在的行 数组元素的值表示皇后所在的列 这样设计的棋盘,所有皇后必定不在同一行 假设前n-1行的皇后已经按照规 ...

  3. C语言-回溯例2

    组合问题 组合:从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合,例如OR = {1,2,3,4}, n = 4, r = 3则无重组合为: {1,2 ...

  4. C语言 指针例解

    在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元 ...

  5. Python语言100例

    Python版本:python 3.2.2 电脑系统:win7旗舰 实例来源:python菜鸟教程100例 #!/usr/bin/python # -*- coding: UTF-8 -*- impo ...

  6. C语言回溯算法解决N皇后问题

    回溯算法的模型是 x++, not satisfy ? x-- : continue. 代码中x作列号,y[x]保存第x列上皇后放置的位置. #include<stdio.h> #incl ...

  7. 动态语言的灵活性是把双刃剑 -- 以Python语言为例

    本文有些零碎,总题来说,包括两个问题:(1)可变对象(最常见的是list dict)被意外修改的问题,(2)对参数(parameter)的检查问题.这两个问题,本质都是因为动态语言(动态类型语言)的特 ...

  8. 以C语言为例的程序性能优化 --《深入理解计算机系统》第五章读书笔记

    其实大多数的编译器本身就能提供一些简单的优化,比如gcc就能通过使用 -O2 或者 -O3 的选项来优化程序.但编译器的优化始终也是有限,因为它必须小心翼翼保证优化过程不对程序的功能有改动.故而程序员 ...

  9. 浮点数运算的精度问题:以js语言为例

    在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00  ...

随机推荐

  1. java环境配置classpath和path变量的作用及设置方法

    1.path:指定cmd中命令执行文件所在的路径.比如javac.java两个可执行文件在jdk的bin目录下,如果path值含有这个bin目录,在cmd下执行这两个命令的时候就会到path指定的目录 ...

  2. 通过performance schema收集慢查询

    MySQL5.6起performance schema自动开启,里面涉及记录 statement event的表 mysql> show tables like '%statement%'; + ...

  3. Thinkphp5.1手册太简单,有的功能用起来不确定结果是否和预料的一样,顾整理记录

    //模板{if false} 1 {else/} //====>可以使用 效果同 {else /} 2 {/if} {if condition="(1 eq 1) and false& ...

  4. activemq的安装启动

    Activemq安装和启动   官网:http://activemq.apache.org/   安装启动: $ tar -zxvf apache-activemq-5.11.1-bin.tar.gz ...

  5. Jenkins+GitHub+maven

    介绍: http://192.168.193.128:8115/jenkins/ 用户名:admin密码:admin电子邮箱:admin@admin.com root/12345678添加新用户: t ...

  6. Struts2的文件上传与下载

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  7. rest-framwork官方文档教程(一)

    该项目是按照官网quickstart进行的,具体也可查看rest-framework官网: https://www.django-rest-framework.org/tutorial/quickst ...

  8. Process类,Thread类,Pool类,gevent类,ProcessPoolExecutor,ThreadPoolExecutor的用法比较

    一 Process类 multiprocessing模块下的一个类 创建子进程. 有两种方法 方法一 from multiprocessing import Process import os def ...

  9. Bootstrap 模态框(Modal)插件数据传值

    原文:http://blog.csdn.net/baalhuo/article/details/51178154 模态框具体代码如下: <!-- 模态框(Modal) --> <di ...

  10. codeforces练习

    DZY Loves Colors Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u S ...