2025.6GESP二级真题(编程题解析)
第二题中,就是想要求在输入的l和r两个数之间,有多少个数能够满足2的x次方加上2的y次方的结果在l和r之间,那么我们可以使用两层循环来给x和y赋值,如果在l和r之间的话那么结果就加1。对于面积为整数,即ab/2为整数,要使得ab/2为整数,那么a*b必须是偶数,所以这个题就转化为了a*b的值为偶数,那么就可以满足条件,并且要保证三角线不同。但是,需要注意如果x和y颠倒的情况下,肯定是一种可能,不要
·
第一题:
题目:数三角形

思路:
首先需要明确,在题目中给出了两个关键点
-
面积为整数
-
三角形不同
比如:测试用例中的3,则是表示直角边的最大值为3,这时我们就有(1,2)、(2,2)、(2,3)满足条件。
对于面积为整数,即ab/2为整数,要使得ab/2为整数,那么a*b必须是偶数,所以这个题就转化为了a*b的值为偶数,那么就可以满足条件,并且要保证三角线不同。
所以题目求解,变成了从1-n之间的数中,找出两个数的乘机为偶数的个数。
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,ans=0;
cin>>n;
for(int i=1; i<=n; i++) {
for(int j=i; j<=n; j++) {
if(i*j%2==0) ans++;
}
}
cout<<ans<<endl;
return 0;
}
第二题
题目:幂和数

思路:
第二题中,就是想要求在输入的l和r两个数之间,有多少个数能够满足2的x次方加上2的y次方的结果在l和r之间,那么我们可以使用两层循环来给x和y赋值,如果在l和r之间的话那么结果就加1。
但是,需要注意如果x和y颠倒的情况下,肯定是一种可能,不要算成两种可能了,所以这里使用i,j进行循环的时候,一定要注意内层循环的j一定是从i开始的
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int l,r,ans=0;
cin>>l>>r;
for(int n=l; n<=r; n++) {
int flag=1;
for(int x=0; x*x<=n&&flag; x++) {
for(int y=x; y*y<=n; y++) {
if((1<<x)+(1<<y)==n) {
ans++;
flag=0;
break;
}
}
}
}
cout<<ans;
}
更多推荐



所有评论(0)