在这个例子中,两个数的十位数都是7,而它们的个位数之和是 6+4=10。

我们可以采用 【心算】个位是5的两位数的平方 的方式。

十位乘以(十位+1)的积,再拼接个位与个位相乘的积。

76 x 74
7 x (7+1) = 56
6 x 4 = 24
56 拼接 24 = 5624
 

再如:83 x 87 = 7221

83 x 87 
8 x 9 = 72
3 x 7 = 21
72 和 21 拼接 = 7221
 

以上的例子很简单,不过有一种例外的情况,就是个位数与个位数相乘的积小于10,这时要在前面补一个0。

例如 31 x 39 = 1209

31 x 39
3 x 4 = 12
1 x 9 = 9
因为1 x 9 = 9,不满10,所以要在9前面加一个0,变成09
最后再把 12 和 09 拼接起来 = 1209
                    346207-106.jpg两个两位数,满足以下2个条件:它们的十位数相同;它们的个位数之和为10。例如:76 x 74 = 5624在这个例子中,两个数的十位数都是7,而它们的个位数之和是 6+4=10。我们可以采用【心算】个位是5的两位数的平方 的方式。十位乘以(十位+1)的积,再拼接个位与个位相乘的积。76 x 74...
				
这是一个比较典型的求解集合中两数之和的问题,可以使用哈希表来解决。具体方法是,先将输入的正整数存入一个哈希表中,然后遍历哈希表中的每个数,对于每个数,再遍历哈希表中的其它数,判断是否存在另外两个数的和等于当前数。如果存在,则计数器加一。 以下是示例代码: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_N 100000 int n; int a[MAX_N]; bool hash[MAX_N]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); hash[a[i]] = true; int cnt = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (hash[a[i] + a[j]]) { cnt++; printf("%d\n", cnt); return 0; 对于输入样例 4 1 2 3 4,输出样例应该是 2。