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 424.替换后的最长重复字符

    替换后的最长重复字符 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 注意:字符串长度 和 ...

  2. Python socket粘包问题(最终解决办法)

    套接字: 就是将传输层以下的协议封装成子接口 对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的 实现第一个功能个:实现:通过客户端向服务端发送命令,调取windows下面 ...

  3. ICPC南京补题

    由于缺的题目比较多,竟然高达3题,所以再写一篇补题的博客 Lpl and Energy-saving Lamps During tea-drinking, princess, amongst othe ...

  4. Navicat数据库备份还原

    Navicat数据库备份包括数据和架构 还原数据库:把备份文件复制到备份文件夹所在位置,还原即可

  5. Kafka介绍 (官方文档翻译)

    摘要:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动 ...

  6. 刷题总结——探险(ssoj)

    题目: 国家探险队长 Jack 意外弄到了一份秦始皇的藏宝图,于是,探险队一行人便踏上寻宝之旅,去寻找传说中的宝藏. 藏宝点分布在森林的各处,每个点有一个值,表示藏宝的价值.它们之间由一些小路相连,小 ...

  7. ECharts学习总结(三)-----基本概念分析

    最近一直在看ECharts相关的内容,进展却不怎么理想,特认真总结如下基础知识: 1) ECharts总体框架和其中各个部分:图类.组件.接口.基础库的具有应用方法和应该把握的细节,并通过实际的例子熟 ...

  8. linux监控平台搭建-内存

    linux监控平台搭建-内存 上一篇文章说的硬盘.就写一下.更加重要的东西.在手机上面是RAM.机器是memory.内存是按照字节编址.每个地址的存储单元可以存放8bit的数据.cpu 通过内存地址获 ...

  9. WPF,布局,Menu,MenuItem,DockPanel,Grid,DockPanel.Dock='',ToolBar,Content,Image,Uri

    布局相关: Grid as title Binding Path="", Mode= TwoWay, model should implement IPropertyChanged ...

  10. linux内核栈与用户栈【转】

    转自:http://19880512.blog.51cto.com/936364/274610 最近linux内核的中断部分,总是被书里的栈弄晕,一会儿内核栈,一会儿用户栈的……很是崩溃,在网上goo ...