.
[此贴子已经被作者于2004-09-05 01:02:13编辑过]
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { int n1,n2,nn,n_n; int k1,k2,kk; int i1,i2; int i,k; for(n1=2;n1<=30;n1++) { for(n2=2;n2<=30;n2++) { n_n=n1+n2;//得到两个数的和 //nn=n1*n2; for(k1=2;k1<=30;k1++) { for(k2=2;k2<=30;k2++) { if(k1+k2==n_n)//得到和为该数值的几个数组 { kk=k1*k2;//求这几个数组的积 for(i1=2;i1<=30;i1++) { for(i2=2;i2<=30;i2++) { if(i1*i2==kk)//生成这个积的数组 i++; } } if(i>=4)//可以生成这个积的数组超过两个
k++; i=0; } } } if(k==2)//如果这个只有一个积是有两个以上数组,就说明对了。 { printf("%d+%d=%d\n",n1,n2,n1+n2); printf("%d*%d=%d\n",n1,n2,n1*n2); getch(); exit(0); } } k=0; } printf("Error!"); getch(); }
结果是3,4么????
我只是算出结果,但很复杂!!!!
没有简化,这已经费九牛二虎之力了!!!!!!
[此贴子已经被作者于2004-09-03 17:52:12编辑过]
数学方法就可以了 ,编程……(其实数学方法有时是编程的最好方法,因为效率最高)
首先可以分析出两数积必然不是质数*质数,(乙说不知道,那甲就知道了这一点)
那么甲就排除了所有质数+质数的可能情况,那剩下的就是合数+合数,和合数+质数两种情况。
这两种情况只能成立一种;
假使两数和为A
对与前一个情况,应该满足:2到A-2只有两个合数,并且A就是这两个合数的和;或者只有一个合数, A就是2*合数;
对于后一种情况,应该满足:2到A-2只有一个合数,并且A不等于2*合数;
从2开始,到6为止正好有两个合数(那这两个数必然在2到6里面找),
那对于第一种情况,没有满足条件的解;
对于第2种情况,有:2,4(排除,原因看后面的帖子); 3,4;
对于每种情况还要验证,如果这些组合中有两个或两个以上积相同,应该排除(因为乙会不知道)。
事实没有,那答案就是这些:程序只要打印一下就OK了;
如果有错,请大家指正,如果要其它方法无非是这 里面几步人判断的给电脑做一下,应该不难推敲
[此贴子已经被作者于2004-09-03 18:00:06编辑过]