习语言解数学题之一

今天习语言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;
}   



<代码结束 华丽的隔断线---------------------------->


<结果 华丽的隔断线---------------------------->


X共有10个可选值,取值范围为101 103 107 109 113 127 131 137 139 149 
M取值范围为1-1000,N取值范围为1000-10000,是否需要修改N值范围?(是/否)M取值范围为1-1000,N取值范围为1000-10000, 
解题进行中...,请等待.. 
  【1】 M=1,N=2283时存在X,Y存在2个解。 
    --- X=101,Y=214。 
    --- X=107,Y=202。 
  【2】 M=1,N=2367时存在X,Y存在2个解。 
    --- X=103,Y=218。 
    --- X=109,Y=206。 

....

....


 【940】 M=62,N=9741时存在X,Y存在2个解。 
    --- X=101,Y=218。 
    --- X=109,Y=202。 
按任意键继续  【941】 M=62,N=9867时存在X,Y存在2个解。 
    --- X=103,Y=226。 
    --- X=113,Y=206。 
  【942】 M=63,N=9865时存在X,Y存在2个解。 
    --- X=103,Y=214。 
    --- X=107,Y=206。 
  【943】 M=64,N=9863时存在X,Y存在2个解。 
    --- X=101,Y=206。 
    --- X=103,Y=202。 
在制定M,N取值区间内,存在943种MN组合,使得X可取指定几个值时,XY存两个或多个可选组合。 
按任意键继续


<结果结束 华丽的隔断线---------------------------->


结果真是太多了,代码可以在这里下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值