$main = "网上大名:<a href='mailto:".$email."'>".$nickname."</a>:(".$t.")<br>留言: ".$note."<br><hr>"
本来就是这样啊,你应该写成。echo "<a href='phpwan.php?pageno=" . ($pageno+1) . "'>下一页</a>"
其实这题并不算太难,关键就是M和S说的那4句话.理解那4句话,后面就好做多了.首先看"有两个数a和b 已知a,b>1并a<b M知道a*b的值 S知道a b的值"和"对于给定的x,y 2<=x,y<=550 且x<=a<b<=y "这两段话很容易理解,主要看x<=a<b<=y这个公式,这个公式其实就是告诉你a和b的取值范围由于,a要小于b所以就可以确定a的取值范围是2~549,b的取值范围是3~550.因为a永远要小于b,所以a为最小值2的时候b为3,b为最大值的时候a为最大值减1就是549.确定了a和b的范围再来看那4句话.首先M:我不知道a和b的值意思就是我光看a和b的积没办法判断值然后S:我也不知道a和b的值,但我先前不知道你不知道这句话是关键!!S首先说:我也不知道a和b的值.就是说他光看和也推断不出值,后面又说:但我先前不知道你不知道.这句话可以这样理解.就是说如果我先前知道你不知道我就知道了.整句话也就是说在S一眼看不出来的情况下,必须M一眼也看不出来!!!接下来是代码:#include <stdio.h>
void jisuan(int ,int)
void main()
{
unsigned int a=0
unsigned int b=0
unsigned int add=0//a+b的和
unsigned int multiply=0//a*b的积
for(a=2a<550a++)
{
for(b=3b<551b++)
{
if(a>=b)
continue
add=a+b
multiply=a*b
jisuan(add,multiply)
}
}
printf("\n")
}
void jisuan(int a,int b)
{
int i=0
int j=0
unsigned int num1=0
unsigned int num2=0
unsigned int x[500]
unsigned int y[500]
unsigned int m[500]
unsigned int n[500]
unsigned int count=0
unsigned int count2=0
for(i=2i++)//计算x*y有多少种方法可以等于b(a*b的积)
{
if(b%i)
continue
y[count]=b/i
x[count]=i
if(x[count]>y[count]||x[count]==y[count])
{
x[count]=0
y[count]=0
break
}
count++
}
for(j=2j++)//计算x+y有多少种方法可以等于a(a+b的和)
{
m[count2]=a-j
n[count2]=j
if(n[count2]>m[count2]||n[count2]==m[count2])
{
m[count2]=0
n[count2]=0
break
}
count2++
}
//如果上面两段代码的任意一个只有一种方法也就是一眼就能看
//出来那就舍弃
if(count==1||count2==1)
return
else
{
i=0
while(x[i]!=0&&y[i]!=0&&m[i]!=0&&n[i]!=0)
{
if(x[i]==n[i]&&y[i]==m[i])
{
num1=x[i]
num2=y[i]
}
i++
}
if(num1==0||num2==0)
return
}
printf("%-3d%-3d",num1,num2)
}
回答完毕!
题外话:由于数字太大的原因,输出的结果可能不太理想!!!把unsigned int换成double会好些.
欢迎分享,转载请注明来源:优选云