题目:有个程序猿,从自己家出门,分别向左、向右走到尽头,发现两个路径上的门牌号的和相同,
这里不包括自己家。门牌号从1到n,他家的号码是k,问所有的可能的二元组<k, n>。
分析:计算(1+ 2 + ... k-1) == (k+1 + ... + n) 得到 k^2 = n*(n+1)/2,满足右侧是平方数为合法。
打表判断,输出即可。
说明:(⊙v⊙),又是好久没刷题了。
/*
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
for (int i = 3; i < 100000000; ++ i) {
int b = (int)sqrt(0.5*i*(i+1) + 0.1);
if (2LL*b*b == i*(i+1LL)) {
printf(" printf(\"%%10d%%10d\\n\", %10d, %10d);\n", b, i);
}
}
system("pause");
return 0;
}
*/
#include <stdio.h>
int main()
{
printf("%10d%10d\n", 6, 8);
printf("%10d%10d\n", 35, 49);
printf("%10d%10d\n", 204, 288);
printf("%10d%10d\n", 1189, 1681);
printf("%10d%10d\n", 6930, 9800);
printf("%10d%10d\n", 40391, 57121);
printf("%10d%10d\n", 235416, 332928);
printf("%10d%10d\n", 1372105, 1940449);
printf("%10d%10d\n", 7997214, 11309768);
printf("%10d%10d\n", 46611179, 65918161);
return 0;
}