2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题
蓝桥杯2023年第十四届省赛真题-平方差
题目描述
给定 L, R,问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 x = y2 − z2。
输入格式
输入一行包含两个整数 L, R,用一个空格分隔。
输出格式
输出一行包含一个整数满足题目给定条件的 x 的数量。
第一次尝试
#include <stdio.h>
long long arr[100002];
int main()
{
int L;
int R;
int i;
int m;
int p;
int n=0;
int count=0;
scanf ("%d",&L);
scanf ("%d",&R);
int brr[R-L+2];
for(int i = 0; i <= R-L+1; i ++){
brr[i] =0;
}
int num=R+1;
for (i=0;i<=num;i++){
arr[i]=i*i;
}
for (i=0;i<num;i++){
for (m=1;m<=num;m++){
if (arr[m]-arr[i]>=L&&arr[m]-arr[i]<=R){
brr[arr[m] - arr[i] - L] = 1;
}
}
}
for(i = 0; i <= R-L+1; i ++){
count += brr[i];
}
printf ("%d",count);
return 0;
}
第二次尝试
#include <stdio.h>
#include <math.h>
int fun(int x);
int fun2(int x);
int main(){
int L;
int R;
scanf ("%d",&L);
scanf ("%d",&R);
int ans = 0;
ans = fun2(R) - fun2(L-1);
printf("%d",ans);
return 0;
}
int fun2(int x){
int a=(x+1)/2;
int b=x/4;
return a+b;
}