C++ B组
A
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int cnt = 0;
for(int i = 1; i<=2020; i++)
{
int a = i;
while(a)
{//判断每个数字2中的数量
if(a%10==2) cnt++;
a/=10;
}
}
cout<<cnt<<endl;
return 0;
}
B
#include<iostream>
#include<algorithm>
using namespace std;
int gcd(int a, int b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
int main()
{
int cnt = 0;
for(int i = 1; i<=2020; i++)
for(int j = 1; j<=2020; j++)
{
if(gcd(i,j)==1) cnt++;
}
cout<<cnt<<endl;
return 0;
}
//ans==2481215
C
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 500;
int a[N][N];
//ans = 761;
int main()
{
a[1][1] = 1;
int ans = 2;
for(int i = 2; i<=50 ; i++)
{
if(i%2==0)
{//偶数从右上到坐下
for(int o = 1, j = i; o<=i; o++, j--)
a[o][j] = ans++;
}
else
{//奇数从左下到右上
for(int o = i,j = 1; o>=1; o--,j++)
a[o][j] = ans++;
}
}
cout<<a[20][20]<<endl;
return 0;
}
D
#include<iostream>
#include<algorithm>
using namespace std;
int n,y,r,w; //年 月 日 周几
int ans;
bool run(int a)//判断闰年
{
if(a%400==0) return true;
if(a%4==0&&a%100!=0) return true;
return false;
}
int main()
{
n = 2000;
y = 1;
r = 1;
w = 6;
int d[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
while(n!=2020||y!=10||r!=1)//没有算 2020 10 1 ;最后要记得加上这天的数量
{
if(run(n)) d[2] = 29;
else d[2] = 28;
if(r==1||w==1) ans += 2;
else ans++;
r++, w++;
if(w>7) w = 1;
if(r>d[y]) r = 1, y++;
if(y>12) y = 1, n++;
}
ans += 2;
cout<<ans<<endl;
return 0;
}
E
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
const int N = 10;
int map[N][N];
set<set<int> > sum;
int ans;
bool st[N];
void dfs(int a, set<int> mid)
{
if(!sum.count(mid) ) sum.insert(mid);
if(mid.size() == 7) return ;
for(int i = 0; i<7; i++)
{
if(map[a][i]==1&&!st[i])
{
mid.insert(i);
st[i] = true;
dfs(i,mid);
st[i] = false;
mid.erase(i);
}
}
}
void add(int a, int b)
{
map[a][b] = 1;
map[b][a] = 1;
}
int main()
{
add(0,1), add(0,5);
add(6,1), add(6,5);
add(6,2), add(6,4);
add(5,4), add(1,2);
add(4,3), add(3,2);
for(int i = 0; i<7; i++)
{
set<int> s;
s.insert(i);
st[i] = true;
dfs(i,s);
st[i] = false;
s.erase(i);
}
cout<<sum.size() <<endl;
return 0;
}
F
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
double n;
double cnt;
double j;
double u;
int main()
{
cin>>n;
double x = n;
while(x--)
{
double a;
cin>>a;
if(a>=60) j++;
if(a>=85) u++;
}
//cout<<n<<endl;
// cout<<(j*100)/n<<"___"<<(u*100)/n;
double ans1 = (j*100)/n, ans2 = (u*100)/n;
double yu1 = fmod(ans1,1), yu2 = fmod(ans2,1);
//if(yu1>=0.5) ans1 ++;
//if(yu2>=0.5) ans2++;
printf("%.0lf%\n",ans1);
printf("%.0lf%\n",ans2);
return 0;
}
G
#include<iostream>
#include<algorithm>
using namespace std;
int n,y,r;
int a;
int ans1; // 回文
int ans2; // ABABBABA
bool run(int a)
{
if(a%400==0) return true;
if(a%4==0&&a%100!=0) return true;
return false;
}
bool check1(int a, int b, int c)
{
int n1 = a/1000, n2 = a/100%10, n3 = a/10%10, n4 = a%10;
int y1 = b/10, y2 = b%10;
int r1 = c/10, r2 = c%10;
if(n1==r2)
if(n2==r1)
if(n3==y2)
if(n4==y1)
return true;
return false;
}
bool check2(int a, int b, int c)
{
int n1 = a/1000, n2 = a/100%10, n3 = a/10%10, n4 = a%10;
int y1 = b/10, y2 = b%10;
int r1 = c/10, r2 = c%10;
if(n1!=n2)
if(n1==n3&&n3==y2&&y2==r2)
if(n2==n4&&n4==y1&&y1==r1)
return true;
return false;
}
int main()
{
cin>>a;
n = a/10000;
y = a/100%100;
r = a%100;
r++;
int d[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int f1=1, f2=1;
while(f1||f2)
{
if(y>12) y=1, n++;
if(y==2)
{
if(run(n)) d[y]=29;
else d[y] = 28;
}
for(int i = r; i<=d[y];i++)
{
if(check1(n,y,i)&&f1)
{
ans1 = n*10000+y*100+i;
f1=0;
}
if(check2(n,y,i)&&f2)
{
ans2 = n*10000+y*100+i;
f2=0;
}
}
r = 1;
y++;
}
cout<<ans1<<endl<<ans2<<endl;
return 0;
}
H
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int N = 1e5 + 10;
char a[N];
int ans;
int p[30];
int main()
{
scanf("%s",a+1);
int n = strlen(a+1);
for(int i = 1; i<=n; i++)
{//当前字母上一次出现的位置 当前字母距离末尾的距离
ans += (i-p[a[i]-'a']) * (n-i+1);
p[a[i]-'a'] = i;
}
cout<<ans<<endl;
return 0;
}