您的位置:首页 > 理论基础

一道人工无法求解的数学题的计算机求解

2012-03-10 17:42 302 查看
本程序采用 习语言 - 中英文C语言双语编译器 编译运行通过。 习语言 - 中文编程的好选择,C语言学习C程序编译的好工具。

今天习语言Q群里,幻象群友提出一个数学题,原起是一个智力题,原题是这样的:真假金币-有十袋金币,每一枚金币重10G。其中有一袋金币是假金币,每枚重量仅9G。有一把电子秤,怎样称一次就知道哪袋金币是假的?这个数学题的提出是幻想的一个解法,这个解法是不是最佳大家另讨论。
现在贴出这个数学题:
M,N,X,Y均为正整数,M取值范围为1-1000,X的可能取值为101 103 107 109 113 127 131 137 139 149

对于任意给定的整数M和N,验证方程1216M+XY=10N,未知数Y是否有可能存在两个解或多个解。

以下是习语言代码:
习语言独有支持的文章风格代码,看是文章,亦是代码,可编译运行。 习语言各大下载网站可下,欢迎下载尝试。

数学题:

M,N,X,Y均为正整数,M取值范围为1-1000,X的可能取值为101 103 107 109 113 127 131 137 139 149

对于任意给定的整数M和N,验证方程1216M+XY=10N,未知数Y是否有可能存在两个解或多个解。

解题分析:

M,N手工赋值的话很辛苦,最好是电脑自动赋值尝试。

M: 1-1000

X: 101 103 107 109 113 127 131 137 139 149

N: 小N - 大N : 小N,大N 可宏定义,也可以命令行输入

求Y

方程式 1216M+XY=10N

等效: XY = 10N - 1216M

条件: 10N -1216M > 0 即 10N > 1216M

同时 (10N -1216M) % X == 0

Y = (10N -1216M) / X

这里M,N确定后,X确定,Y就确定,要么存在解,要么不存在解。

X有10个可选项,就看这里面 Y存在解的情况是否大于1



#包含 “习语言系统.接口”

#定义 小M 1

#定义 大M 1000

自然数 X值[] = {101,103,107,109,113,127,131,137,139,149};

#定义 X值个数 ( 类型长度(X值)/ 类型长度(自然数))

自然数 X值标志[] = {101,103,107,109,113,127,131,137,139,149};

自然数 Y值[] = {101,103,107,109,113,127,131,137,139,149};

整数类型 主函数()

{

//==用户代码开始

自然数 M,N,X,大N=10000,小N=1000;

整数类型 X位置,Y值计数=0,MN组合计数=0;

汉字类型 用户选择=0;

格式输出(“X共有%整个可选值,取值范围为101 103 107 109 113 127 131 137 139 149 %行”,X值个数 );

格式输出(“M取值范围为%整-%整,N取值范围为1000-10000,是否需要修改N值范围?(是/否)”,小M,大M);

用户选择 = 【汉字类型】 输入字(【无参数】);

如果(用户选择 等于 ‘是’){

输出字符串(“输入最小N值:”); 小N=【整数类型】 输入整数(【无参数】);

输出字符串(“输入最大N值:”); 大N=【整数类型】 输入整数(【无参数】);

}

格式输出(“M取值范围为%整-%整,N取值范围为%整-%整, %行”,小M,大M ,小N,大N );

格式输出(“解题进行中...,请等待.. %行” );

步进循环(M=小M;M ≤ 大M;M++)

步进循环(N=小N;N ≤ 大N;N++)

{

如果( 10*N ≤ 1216*M) 继续;

Y值计数 = 0;

步进循环(X位置 = 0;X位置 < X值个数;X位置 加加 )

X值标志[X位置]=0;

步进循环(X位置 = 0;X位置 < X值个数;X位置 加加 )

{

X = X值[X位置];

如果((10*N -1216*M) % X ≠ 0 ) 继续;

Y值[X位置] = (10*N -1216*M) / X ;

X值标志[X位置]=1;

Y值计数 ++;

}

如果(Y值计数 大于 1 ){

MN组合计数 ++;

格式输出(“ 【%整】 M=%整,N=%整时存在X,Y存在%整个解。 %行”,MN组合计数,M,N,Y值计数 );

步进循环(X位置 = 0;X位置 < X值个数;X位置 加加 )

如果(X值标志[X位置])

格式输出(“ --- X=%整,Y=%整。 %行”,X值[X位置],Y值[X位置] );

如果(MN组合计数 %20 == 0)暂停();

}

}

格式输出(“在制定M,N取值区间内,存在%整种MN组合,使得X可取指定几个值时,XY存两个或多个可选组合。 %行”, MN组合计数 );

//==用户代码结束

暂停();

返回 0;

}



更多习语言系列作品介绍:

1、习丽妞 (linux环境下的中英文c语言)双语编程工具。
2、习语言编辑器: 一个支持中英文关键词高亮的文本编辑器。

3、中汇:中文汇编器

4、构建:中文构建工具(中文make工具)

5、习51-中文C51嵌入式开发伴侣

6、习佳佳-中文C++应用开发伴侣

7、习佳娃-中文JAVA开发伴侣

。。。。。。
欢迎爱好者试用,交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: