问题描述
2021 是一个非常特殊的数,它可以表示成两个非负整数的平方差,2021 = 45 * 45 - 2 * 2。
2025 也是同样特殊的数,它可以表示成 2025 = 45 * 45 - 0 * 0。
请问,在 1 到 2021 中有多少个这样的数?
请注意,有的数有多种表示方法,例如 9 = 3 * 3 - 0 * 0 = 5 * 5 - 4 * 4,在算答案时只算一次。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
测试代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int n;
//多次输入,方便测试
while(scanf("%d",&n)!=EOF){
//满足条件的个数
int sum = 0;
//动态创建个数组a
int *a = (int*)malloc(sizeof(int)*n);
//全部赋值为0
memset(a, 0, sizeof(int)*n);
for (int k = 1; k <= n; k++) {
for (int i = 0; i <= k; i++) {
//a[k - 1]=1说明已经找到了满足条件的值,跳出
if (a[k - 1] != 0) break;
for (int j = 0; j <= k; j++) {
if (a[k - 1] != 0) break;
if (k == (i*i - j * j)) {
//总数+1
sum++;
//输出找到的值,方便查错
printf("第%d个: %d = %d*%d - %d*%d\n",sum, k, i, i, j, j);
//已经找到的标记
a[k - 1]++;
break;
}
}
}
}
printf("sum=%d\n", sum);
//将a释放
free(a);
}
return 0;
}