代码如下
#include<iostream> using namespace std; //注意数组长度 int number[10001]; // 定义输入数组 int book[10001]; //定义标记数组(桶) int num[10001]; // 定义判断输出数组 int main() { int n; int maxn = -1; int ans = 0; cin >> n; for(int i = 1; i <= n; i++) { cin >> number[i]; //输入 maxn = max(maxn,number[i]); //求出最大输入数字,减少不必要的运行时间 book[number[i]] = 1; //标记,将输入的数在桶中标记 } for(int i = 1; i <= maxn; i++) for(int j = i+1; j <= maxn; j++) { int k = i + j; // 两者对应的下标和 if(k <= 10000) //注意长度 if(book[k] == book[i] * book[j] && book[k] != 0) // 判断 num[k] = 1; // 符合题目, 将数字在数组中赋值为 1 } for(int i = 1; i <= maxn; i++) if(num[i] == 1) // 找出数组中符合题意的数, 即数组中为 1 的数 ans++; // 求个数 // cout << i << " "; cout << ans << endl; //输出个数 return 0; }