直到A穷举完毕,即得到最小值s及对应的B。
main()/*参考答案:
71*/
{ints=2699,k,B=2698;/*设B=2698时和s有最小值2699*/
for(k=1349;k>51;k--)/*51为2698开方取整*/
if(2698%k==0)
if(2698/k+k
printf("%d",B);
}
解法二:
依据数学定理:
AB为定值时,A与B越接近,A+B越小。
因为A=sqrt(2698),即B>=52。
因此可对B在[52,2698]上从左向右搜索,一旦B整除2698,即停止搜索。
main()
{intb=52;
while(2698%b)b++;
printf("%d",b);
}
也可用EXCEL求解。
如图所示。
5、求共有几组i,j,k符合算式ijk+kji=1534。
其中i,j,k均为[0,9]上的整数且i解法一:
ijk+kji=100i+10j+k+100k+10j+i=101*i+101*k+20*j。
可对i,j,k进行穷举搜索。
main()/*参考答案:
2*/
{inti,j,k,n=0;
for(i=1;i<9;i++)
for(j=0;j<10;j++)
for(k=i+1;k<10;k++)
if(101*i+101*k+20*j==1534)n++;
printf("%d",n);
}
解法二:
直接对三位数进行穷举搜索求解。
main()
{intm,n=0;
for(m=101;m<999;m++)
if(m/100if(m+(m%10)*100+(m/100)+(m/10%10)*10==1534)n++;
printf("%d",n);
}
数学解法
101*i+101*k+20*j=1534
=>101*(i+k)=1534-20j
=>1534-20*9≤101*(i+k)≤1534
=>14≤i+k≤15
(1)i+k=15=>j无整数解
(2)i+k=14=>j=6
而i共两组解。
6、求[1,50]上所有整数能构成直角三角形三边的组数。
分析:
本质上是在[1,50]上求方程X2+Y2=Z2的正整数解个数。
对X、Y、Z分别进行穷举即可。
注意到(X,Y,Z)与(Y,X,Z)为相同组,故可假定Xmain()/*参考答案:
20*/
{longx,y,z,n=0;
for(z=3;z<=50;z++)
for(y=2;yfor(x=1;xif(x*x+y*y==z*z)n++;
printf("%d",n);
}
EXCEL求解:
如图所示。
操作步骤为:
(1)A列从第二行起输入数1,2,...,48,表示X的可能取值;
(2)第一行从第二列起输入3,4,...,50,表示Z的可能取值;
(3)在B2单元格输入公式如图所示。
求Z与X的平方差的平方根;
(4)选择B2单元格,向右拖其填充柄至第51列;
(5)再分别选择B2、B3等单元格,向下拖填充柄,如图效果(保证X(6)统计整数个数,除以2即可。
【考点三】数列求项或求和问题
【解法一】利用数列通项公式求项、利用数列求和公式求和。
【解法二】利用数列相邻项的递推关系进行计算。
【易错点】