目录
试题A :门牌制作
#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
int arr[N];
int main()
{
int ans = 0,t;
for(int i = 1;i <= 2020;i++)
{
t = i;
while(t > 0)
{
if(t % 10 == 2) ans++;
t /= 10;
}
}
cout<<ans<<endl;
return 0;
}
试题B :既约分数
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(a % b == 0) return b;
return gcd(b,a % b);
}
int main()
{
int ans = 0;
for(int i = 1;i <= 2020;i++)
{
for(int j = 1;j <= 2020;j++)
{
if(gcd(i,j) == 1) ans++;
}
}
cout<<ans<<endl;
return 0;
}
试题C :蛇形填数
#include <bits/stdc++.h>
using namespace std;
int arr[100][100];
int main()
{
int sum = 1;
for(int i = 0;i < 50;i++)
{
//奇数,行-,列+
if(i % 2 == 1)
{
for(int x=i,y=1;x >= 0 && y <= i;x--,y++)
arr[x][y] = sum++;
}
//偶数,行+,列-
else
{
for(int x=1,y=i;x <= i && y >= 0;x++,y--)
arr[x][y] = sum++;
}
}
cout<<arr[20][20]<<endl;
return 0;
}
试题D :跑步训练
#include <bits/stdc++.h>
using namespace std;
bool judge(int year)
{
if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
return true;
return false;
}
int main()
{
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int sum = 0;
int w = 6;
for(int y = 2000;y <= 2020;y++)
{
if(judge(y)) month[1] = 29;
for(int m=1;m <= 12;m++)
{
for(int d = 1;d <= month[m-1];d++)
{
if(d == 1 || w == 1) sum += 2;
else sum++;
w = w % 7 + 1;
if(y == 2020 && m == 10 && d == 1) cout<<sum<<endl;
}
}
month[1] = 28;
}
return 0;
}
试题E :七段码
#include <bits/stdc++.h>
using namespace std;
//是否连通
bool con[8][8];
bool vis[8];
int father[8];
int sum;
int f(int n)
{
if(father[n] == n) return n;
else
{
father[n] = f(father[n]);
return father[n];
}
}
void dfs(int n)
{
if(n > 7)
{
for(int i = 1;i <= 7;i++)
father[i] = i;
for(int i = 1;i <= 7;i++)
{
for(int j = 1;j <= 7;j++)
{
if(vis[i] && vis[j] && con[i][j])
{
int x = f(i);
int y = f(j);
if(x != y)
father[x] = y;
}
}
}
int k = 0;
for(int i = 1;i <= 7;i++)
{
if(vis[i] && father[i] == i) k++;
}
if(k == 1) sum++;
return;
}
vis[n] = 1;
dfs(n+1);
vis[n] = 0;
dfs(n+1);
}
int main()
{
con[1][2]=con[1][6]=1;
con[2][1]=con[2][7]=con[2][3]=1;
con[3][7]=con[3][4]=con[3][2]=1;
con[4][5]=con[4][3]=1;
con[5][4]=con[5][7]=con[5][6]=1;
con[6][1]=con[6][7]=con[6][5]=1;
con[7][6]=con[7][5]=con[7][2]=con[7][3]=1;
dfs(1);
cout<<sum<<endl;
return 0;
}
试题F :成绩统计
【样例输入】
7
80
92
56
74
88
100
0
【样例输出】
71%
43%
#include <bits/stdc++.h>
using namespace std;
int n,n1,n2;
float a,b;
int main()
{
cin>>n;
int score;
for(int i = 1;i <= n;i++)
{
cin>>score;
if(score >= 60) n1++;
if(score >= 85) n2++;
}
a = 1.0f * n1 / n * 100;
b = 1.0f * n2 / n * 100;
printf("%.0f%%\n",a);
printf("%.0f%%\n",b);
return 0;
}
试题G :回文日期
#include <bits/stdc++.h>
using namespace std;
bool judge(int n)
{
int t = n;
int reverse = 0;
while(t > reverse)
{
reverse = reverse * 10 + t % 10;
t /= 10;
}
//cout<<reverse<<"--"<<t;
return t == reverse || reverse / 10 == t;
}
bool judgeYear(int n)
{
if(n % 400 == 0 || n % 4 == 0 && n % 100 != 0)
return true;
return false;
}
bool judge2(int x)
{
int s[8];
int m=1000000;
int n=10;
s[0]=x/10000000;
for(int i=1;i<8;i++,m/=10)
{
s[i]=x/m%n;
}
if(s[0]==s[2]&&s[2]==s[5]&&s[5]==s[7]&&s[1]==s[3]&&s[3]==s[4]&&s[4]==s[6])
{
return true;
}
else return false;
}
int main(){
int n,str,flag1 = 0,flag2 = 0;
cin>>n;
int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
for(int y = n / 10000;true;y++)
{
str = y * 10000;
int m;
if(y == n / 10000) m = n / 100 % 100;
else m = 1;
for(;m <= 12;m++)
{
str += m * 100;
int d;
if(y == n / 10000 && m == n / 100 % 100) d = n % 100 + 1;
else d = 1;
for(;d <= month[m];d++)
{
str += d;
if(flag1 == 0 && judge(str))
{
cout<<str<<endl;
flag1 = 1;
}
if(flag2 == 0 && judge2(str))
{
cout<<str<<endl;
flag2 = 1;
}
str -= d;
}
if(flag1 && flag2) break;
str -= m * 100;
}
if(flag1 && flag2) break;
}
return 0;
}
试题H :字串分值
【样例输入】
ababc
【样例输出】
28
【样例说明】
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1
#include <bits/stdc++.h>
using namespace std;
int ans;
set<char> s;
int main()
{
string str;
cin>>str;
for(int i = 0;i < str.length();i++)
{
s.clear();
for(int j = i;j < str.length();j++)
{
s.insert(str[j]);
ans += s.size();
}
}
cout<<ans<<endl;
return 0;
}
试题I :平面切分(不会)
【样例输入】
3
1 1
2 2
3 3
【样例输出】
6
试题J : 字串排序(不会)
【样例输入】
4
【样例输出】
bbaa
【样例输入】
100
【样例输出】
jihgfeeddccbbaa