A门牌制作
答案是624,简单的模拟。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int res, ans;
int check(int x)
{
ans = 0;
while(x)
{
if(x % 10 == 2)
ans++;
x /= 10;
}
return ans;
}
int main(void)
{
int n = 2020;
for(int i = 1; i <= n; i++)
{
check(i);
res += ans;
}
cout<< res << endl;
return 0;
}
B既约分数
错误答案呜呜;2496110
错误代码…
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int res = 0;
bool check(int x, int y)
{
int t = max(x,y);
for(int i = 2; i*i <= t; i++)
{
if(x % i == 0 && y % i == 0)
return false;
}
return true;
}
int main(void)
{
int n = 2020;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
{
if(i == j)
continue;
if(check(i,j))
{
//cout<< i << " " << j << endl;
res ++;
}
}
cout<< res << endl;
return 0;
}
正确答案是2481215.
代码如下。
#include< bits/stdc++.h >
using namespace std;
int res;
int main()
{
for(int i = 1; i <= 2020; i++)
for(int j = 1; j <= 2020; j++)
if(_ _gcd(i, j) == 1)
res++;
cout<< res << endl;
return 0;
}
再来一份正确代码:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(b == 0)
return a;
return gcd(b,a%b);
}
//扩展的哦,可以省
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
int main(void)
{
int res = 0;
for(int i = 1; i <= 2020; i++)
for(int j = 1; j <= 2020; j++)
if(gcd(i,j) == 1)
res++;
cout<< res << endl;
return 0;
}
C蛇形填数
答案是761,正确。
excel大法好
D跑步锻炼
答案是8879,正确。
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int res;
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool is_leap(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return true;
return false;
}
int month_day(int y,int m)
{
if(m == 2)
return is_leap(y) + days[2];
return days[m];
}
int check(int y, int m, int d, int w)
{
if(d == 1 || w == 1)
res += 2;
else
res ++;
cout<< y << " "<< m << " " << d <<" "<< w << " "<< res << endl;
return res;
}
int main(void)
{
int year = 2000, month = 1, day = 1, week = 6;
for(year = 2000; year <= 2020; year++)
{
for(month = 1; month <= 12; month++)
{
for(day = 1; day <= month_day(year,month); day++)
{
check(year, month, day, week);
week++;
if(day > month_day(year,month))
day = 1, month++;
if(month > 12)
year++, month = 1;
if(week > 7)
week = 1;
}
if(year == 2020 && month == 10 && day == 2)
break;
}
}
cout<< res << endl;
return 0;
}
E七段码
总共的情况也就100多种,感觉可以手算。
F
AC
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int count1, count2;
int main(void)
{
int n;
cin>> n;
int sum = n;
while(n--)
{
int x;
cin>> x;
if(x >= 60)
count1 ++;
if(x >= 85)
count2 ++;
}
printf("%.0lf%%\n", count1*1.0/sum *100);
printf("%.0lf%%\n", count2*1.0/sum *100);
return 0;
}
G回文日期
#include<iostream>
using namespace std;
int num1[105],num2[105],num3[105];
int day[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check_a(int n)
{
int i = 1;
while(n)
{
num1[i] = n % 10;
n /= 10;
i++;
}
if(num1[1]==num1[8] && num1[2]==num1[7] && num1[3]==num1[6] && num1[4]==num1[5])
return true;
return false;
}
bool check_b(int n)
{
int j = 1;
while(n)
{
num2[j] = n % 10;
n /= 10;
j++;
}
if(num2[1]==num2[8] && num2[2]==num2[7] && num2[3]==num2[6] && num2[4]==num2[5])
if(num2[1]==num2[3] && num2[2]== num2[4] && num2[1]!=num2[2])
return true;
return false;
}
bool is_leap(int year)
{
if(year%4 == 0 && year%100 != 0 || year%400 == 0)
return true;
return false;
}
int dayofmonth(int year,int month)
{
if(month == 2)
return is_leap(year)+28;
return day[month];
}
bool check_c(int n)
{
int year = n / 1000;
int k = 1;
while(n)
{
num3[k] = n % 10;
n /= 10;
k++;
}
int month = num3[4]*10+num3[3];
if(month > 12)
return false;
int day = num3[2]*10 + num3[1];
if(day <= dayofmonth(year,month))
return true;
return false;
}
int main(void)
{
int n;
cin>> n;
int flag = 0;
while(1)
{
n++;
if( !check_c(n) )
continue;
if( check_a(n) && flag == 0 )
{
cout<< n << endl;
flag = 1;
}
if( check_b(n) )
{
cout<< n;
return 0;
}
}
return 0;
}
H子串分值和
过50%的数据
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[100010];
int res;
int main(void)
{
string s;
cin>> s;
for(int i = 0; s[i]; i++) //起始位置
{
for(int j = i; s[j]; j++) //终止位置
{
for(char c = 'a'; c != 'z'+1; c++)
a[c-'0'] = 0;
for(int k = i; k <= j; k++)
a[s[k]-'0']++;
for(char c = 'a'; c != 'z'+1; c++)
{
if(a[c-'0'] != 0)
res++;
}
}
}
cout<< res << endl;
return 0;
}