C语言【微项目13】—7-11店问题[四个相加和相乘都等于7.11](采用蛮力法实现)
目录
【TDTX】
【C99】
【编译与运行环境】64位Windows操作系统,TDM-gcc 4.9.2 64bit编译。
【问题描述】x+y+z+w=7.11且xyzw=7.11,求解x,y,z,w的满足解的组合
【思路】本题解决思路和百钱百鸡问题解法一样,类比书写代码即可。
【代码版本】1.C语言版(增量0.01);2.JAVA语言采用BigInteger版(增量0.01)
【注】整形/整形只会保留整数部分,因此转换为整数相等比较,两个等式各自扩大100倍。
相在当于x、y、z、w的增量为0.01状态下,求得的解。
即原来等式转化为:X+Y+Z+W=711且XYZW=711000000。
切勿使用XYZW/1000000 == 711去比较,因为会将得到的结果的整数部分和711比较,导致解不准确。
- 一、qllwt.c
- 二、Main.java(BigInteger)
- 三、 运行结果示例
- 2.1 C语言版(0.01增量)
- 2.2 JAVA版(0.01增量)
【TDTX】
【C99】
【编译与运行环境】64位Windows操作系统,TDM-gcc 4.9.2 64bit编译。
【问题描述】x+y+z+w=7.11且xyzw=7.11,求解x,y,z,w的满足解的组合
【思路】本题解决思路和百钱百鸡问题解法一样,类比书写代码即可。
【代码版本】1.C语言版(增量0.01);2.JAVA语言采用BigInteger版(增量0.01)
【注】整形/整形只会保留整数部分,因此转换为整数相等比较,两个等式各自扩大100倍。
相在当于x、y、z、w的增量为0.01状态下,求得的解。
即原来等式转化为:X+Y+Z+W=711且XYZW=711000000。
切勿使用XYZW/1000000 == 711去比较,因为会将得到的结果的整数部分和711比较,导致解不准确。
一、qllwt.c
#include
int main()
{
int x,y,z,w;
long num = 0;
int k = 0;
for(x = 1;x < 711;x++)
{
for(y = 1;y < 711 - x;y++)
{
for(z = 1;z < 711 - x - y;z++)
{
w = 711 - x - y - z;
num++;
if((w*x*y*z) == 711000000)
{
k++;
printf("第%2d:(%f,%f,%f,%f)\n",k,x/(double)100,y/(double)100,z/(double)100,w/(double)100);
}
}
}
}
printf("组合遍历计算次数:num = %ld\n",num);
return 0;
}
二、Main.java(BigInteger)
import java.math.BigInteger;
public class Main
{
public static void main(String[] args)
{
long num = 0;
int k = 0;
BigInteger x,y,z,w;
BigInteger Soo = new BigInteger("711");
BigInteger SooM = new BigInteger("711000000");
BigInteger One = new BigInteger("1");
String sx,sy,sz,sw;
for(x = new BigInteger("1");x.compareTo(Soo) == -1;x = x.add(One))
{
for(y = new BigInteger("1");y.compareTo(Soo) == -1;y = y.add(One))
{
for(z = new BigInteger("1");z.compareTo(Soo) == -1;z = z.add(One))
{
w = Soo.subtract(x).subtract(y).subtract(z);
num++;
if((w.multiply(x).multiply(y).multiply(z)).compareTo(SooM) == 0)
{
k++;
sx = ""+x;
sy = ""+y;
sz = ""+z;
sw = ""+w;
double xx = Double.parseDouble(sx);
double yy = Double.parseDouble(sy);
double zz = Double.parseDouble(sz);
double ww = Double.parseDouble(sw);
System.out.printf("第%2d:(%f,%f,%f,%f)\n",k,xx/100,yy/100,zz/100,ww/100);
}
}
}
}
System.out.printf("组合遍历计算次数:num = %d\n",num);
}
}
三、 运行结果示例
2.1 C语言版(0.01增量)
2.2 JAVA版(0.01增量)
------------------------------------------------------第十三次发项目类文章有点激动啊!-----------------------------------------------------
-----------------------------------------------------【C语言—微项目—自编练习】----------------------------------------------------------
----------------------------------------------------------------【TDTX】--------------------------------------------------------------------------