第一题:
解题思路:
学过编程的应该都知道吧。
相关代码:
#include<iostream>
using namespace std;
int main(){
cout<<2021%20;
return 0;
}
答案:1
第二题:
解题思路:
运用到一个很基础的定理,下面是他的证明过程。
相关代码:
#include<iostream>
using namespace std;
int n;
long long s=1;
int main(){
cin>>n;
if(n%2==0){
for(long long i=2;i<=n;i=i+2){
s=(s*i)%100000;
}
}
else{
for(long long i=1;i<=n;i=i+2){
s=(s*i)%100000;
}
}
cout<<s;
return 0;
}
答案:59375
第三题:
解题思路:
没什么思路,我感觉这道题有手就行。
相关代码:
#include<iostream>
using namespace std;
int res;
int main(){
for(int i=1;i<=2021;i++){
for(int j=1;j<=2021;j++){
if(i*j<=2021){
res++;
}
}
}
cout<<res;
return 0;
}
答案:15698
第四题:
解题思路:
如果采用暴力解法,可能到时候会算不出来,时间复杂度太高了。所以这里的算法要进行优化,我们可以采用高中数学学过的挡板法。
相关代码:
#include<iostream>
using namespace std;
long long C(int a,int b){
long long res=1;
for(int i=a-b+1,j=1;i<=a&&j<=b;i++,j++){ //注意:a-b+1到a和1到b的间隔是一样的。
res=res*i/j;
}
return res;
}
int main(){
long long n=C(2020,4);
cout<<n;
return 0;
}
答案:691677274345
第五题:涉及到图论知识,我目前没有复习。
第六题:
解题思路:
这道题,我感觉学过编程的应该都会吧。
相关代码:
#include<iostream>
using namespace std;
string s1;
int N=5;
int count;
int main(){
while(N--){
cin>>s1;
if(s1[0]==s1[2]&&s1[3]==s1[1]+1){
count++;
}
}
cout<<count;
}
第七题:
解题思路:
我感觉都应该会做这道题。
相关代码:
#include<iostream>
using namespace std;
int n;
int count;
int main(){
cin>>n;
for(int i=1;i<=n-1;i++){
if(i*i%n<((double)n)/2){
count++;
}
}
cout<<count;
return 0;
}
第八题:
解题思路:
任何一个完全平方数都可以分解每个质因数的偶数次幂相乘,
例如36可以拆分成2*2*3*3,2和3都是偶数次幂,100可以拆分成2*2*5*5.
所以这道题我们要求出该数的每个质因数的指数,并且把每一个质因数的指数为奇数的质因数全部乘到一起。
例如 n=12 n可以拆分成2*2*3,只有3的指数是奇数,则x为3。
或者换一种思路,我们把指数为偶数的质因数全部剔除掉,最后剩下的一定是x。
相关代码1:
#include<iostream>
#include<cmath>
using namespace std;
long long n;
long long res=1;
int count=0;
int main(){
cin>>n;
for(long long i=2;i<=sqrt(n);i++){
while(n%i==0){
count++;
n=n/i;
}
if(count%2==1){
res=res*i;
}
count=0;
if(n==1){
break;
}
}
if(n>1){
res*=n;
}
cout<<res;
return 0;
}
相关代码2:
#include<iostream>
#include<cmath>
using namespace std;
long long n;
int main(){
cin>>n;
for(long long i=2;i*i<=n;i++){
while(n%(i*i)==0){ //剔除质因数以外的因数。
n=n/(i*i);
}
}
cout<<n;
return 0;
}