程序代码:
#include<stdio.h>
void main()
{
int i,j,k;
for(i=0;i<1000;i++)
for(j=10;j<100;j++)
for(k=13;k<100 ;k++)
if(i+100==j*j&&i+168==k*k)
{
printf("%d\n",i);
break;
}
输出为156
问题:一整数,它加100后是完全平方数,再加168还是完全平方数,求该整数
解题思路:设该数为x,它加100后是A,再加168为B。
则因为A是完全平方数,
所以A为正数,且A=y*y,y为正整数或0。
同理,B为正数,B=z*z,z为正整数。
因为B=A+168>A,所以,我们可设z=y+n,n为正整数,n>0。
由B=A+168,有:(y+n)(y+n)=y*y+168,即:y=84/n-n/2。
又y为正整数,所以84/n-n/2≥0,则得出n≤13
所以,编程时可用的条件有:
0<n≤13
y=84/n-n/2
x=y*y-100,当y为整数时,就是符合题目的y。
*/
#include <stdio.h>
int main()
{
int n,x;
float y;
for(n=1;n<=13;n++)
{
y=84.0/n-n/2.0;
//这里用84.0和2.0,是因为整数用“/”时,结果会取整,用这种浮点型数才不会直接取整数。
if(int(y) == y)//当y是一个整数时,求出对应x,并输出。
{
x=(int)(y*y-100);
printf("%d\n",x);
}
}
return 0;
}
输出为1581、261、21、-99
#include "stdio.h"
#include "math.h"
int main(int argc, char* argv[])
{
long int i;long double j,k;
for(i=1;i<=1000;i++)
{
j=(int)sqrt(i+100);
k=(int)sqrt(i+268);
if((j*j==i+100)&&(k*k==i+268))
printf("%ld\n",i);
}
return 0;
}
这是改你的,输出为21,261