在这个例子中,两个数的十位数都是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。