首先这种题目一般就是签到题。
由于c和d的范围是0-1e9,这个范围是蛮大的。通过思考由于a*b=d,且由于题意说a<=b。因此a<=而且b>=。那么直接从0-遍历a的值,则b=c-a,然后通过判断a*b是否为d来看是否符合题目意思。题中要小心d为0的时候,a的值也可能为0,因此需要从0开始遍历,而不是从1开始遍历。
#include <stdio.h>
#include <math.h>
int main(){
int K;
scanf("%d",&K);
while(K--){
int c,d;
scanf("%d%d",&c,&d); //c是和 d是积
int tmp=sqrt(d),a,b,flag=0; //用flag来判断是否找到了
for(a=0;a<=tmp;a++){
b=c-a;
if(a*b==d){
flag=1;
break;
}
}
if(flag) printf("%d %d\n",a,b);
else printf("None\n");
}
return 0;
}
好啦,明天再见喽。