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. Leetcode 446.等差数列划分II 子序列

    等差数列划分II 子序列 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为等差数列: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, ...

  2. CM10 WIFI连不上解决方案

    手机是Moto Mileston2 ,好久之前就刷成了CM10, 但是一直没出问题. 最近,发现在某些路由器上连接不上,总是 在验证账户或者获取IP. 解决办法如下: http://moto.zol. ...

  3. JAVA-两种后台页面跳转方式

    1.请求转发 RequestDispatcher rd = request.getRequestDispatcher("url"); rd.forward(request, res ...

  4. Python封装与隐藏

      今日内容: 1.封装与隐藏2.property3.绑定方法与非绑定方法 知识点一:封装与隐藏 1.什么封装:   封:属性对外是隐藏的,但对内是开放的   装:申请一个名称空间,往里装入一系列名字 ...

  5. IB_DESIGNABLE 和 IBInspectable 的用法

    我们经常会在用一些自定义 UIView 来完成一些特殊的UI效果,但是怎么让我自定义的 UIView 在 Storyboard 中预览和修改一些自定义参数呢.这就需要用到两个吊吊的东西. IB_DES ...

  6. ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)

    1024: 末位零 Time Limit: 1 Sec  Memory Limit: 32 MB Submit: 60  Solved: 11 [Submit][Status][Web Board] ...

  7. 刷题总结——run(ssoj)

    题目: 题目描述 企鹅国正在举办全面运动会,第一项比赛就是跑步.N 个人在圆形跑道上跑步,他们都有各自的速度和起点.但这个跑步规则很奇怪,当两个人相遇的时候编号较小的就会出局,当场上剩下最后一个人的时 ...

  8. CF911F Tree Destruction (树的直径,贪心)

    题目链接 Solution 1.先找出树的直径. 2.遍历直径沿途的每一个节点以及它的子树. 3.然后对于每个非直径节点直接统计答案,令直径的两个端点为 \(x_1,x_2\) . \[Ans=\su ...

  9. django无法同步数据库 Error loading MySQLdb module: No module named ‘MySQLdb‘

    最近在学习Python,打算先看两个在线教程,再在github上找几个开源的项目练习一下,在学到“被解放的姜戈”时遇到django同步数据库时无法执行的错误,记录一下. 错误现象: 执行python ...

  10. element-ui复合型输入框的显示问题

    按照官方文档那样发现,最左边的选择器里面的字显示不出来,解决方法是在为el-select设置宽度,就可以正常显示了