试题 A: 门牌制作
本题总分:5 分
代码:
#include<iostream>
using namespace std;
int main()
{
int couter=0;
for(int i=1;i<=2020;i++)
{
int a=i/1000;
int b=i/100%10;
int c=i/10%10;
int d=i%10;
if(a==2)
couter++;
if(b==2)
couter++;
if(c==2)
couter++;
if(d==2)
couter++;
}
cout<<couter;
return 0;
}
答案:
试题 B: 既约分数
本题总分:5 分
代码:
#include<iostream>
using namespace std;
bool gcd (int i,int j)
{
while(i!=j)
{
if(i>j)
i=i-j;
else if(j>i)
j=j-i;
}
if(i==1)
return true;
else
return false;
}
int main()
{
int couter=0;
for(int i=1;i<=2020;i++)
{
for(int j=1;j<=2020;j++)
{
if(gcd(i,j))
couter++;
}
}
cout<<couter;
return 0;
}
答案:
试题 C: 蛇形填数
本题总分:10 分
注意:只让求了20行20列的数,找到行数=列数时的数字规律即可,不需要求出全部的数。
代码:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int sum=1;
for(int i=1;i<=n;i++)
{
sum=sum+4*(i-1);
}
cout<<sum;
return 0;
}
答案:
试题 D: 跑步锻炼
本题总分:10 分
代码:
#include<iostream>
using namespace std;
int main()
{
int y=2000;
int m=1,d=0,days;
int sum=1; //第一天跑两千米
int week=5; //第一天是星期六
while(y!=2020 || m!=10 || d!=1)
{
if((y%4==0 && y%100!=0 )|| y%400==0) // 判断是否是闰年
days=366;
else
days=365;
d++;
sum+=1; //每天都跑1km
week=(week+1)%7;
if(week==1) //周一多跑1km
sum+=1;
if((m==2 && d==29 && days==366) || ( m==2 && d==28 && days==365))
{
m++;
d=0;
if(week!=1)
sum+=1;
}
if( (m==1 || m==3 || m==5 || m==7 || m==8 || m==10) && d==31)
{
m++;
d=0;
if(week!=1)
sum+=1;
}
if( (m==4 || m==6 || m==9 || m==11 )&& d==30)
{
m++;
d=0;
if(week!=1)
sum+=1;
}
if(m==12 && d==31)
{
m=1;
d=0;
y++;
if(week!=1)
sum+=1;
}
}
cout<<sum+2; //2020年10月1日也跑了2km
return 0;
}
答案:
试题 E: 七段码
本题总分:15 分
代码:
答案:
试题 F: 成绩统计
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
代码:
#include<iostream>
using namespace std;
int main()
{
int n,x;
cin>>n;
int jige=0,youxiu=0;
for(int i=0;i<n;i++)
{
cin>>x;
if(x>=60)
{
jige++;
}
if(x>=85)
{
youxiu++;
}
}
int a=(jige*100)/n;
int b=(youxiu*100)/n;
if(jige*1000/n%10>=5)
cout<<a+1<<"%"<<endl;
else
cout<<a<<"%"<<endl;
if(youxiu*1000/n%10>=5)
cout<<b+1<<"%";
else
cout<<b<<"%";
return 0;
}
试题 G: 回文日期
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string exp;
cin>>exp;
int y=(exp[0]-'0')*1000+(exp[1]-'0')*100+(exp[2]-'0')*10+exp[3]-'0';
int m=(exp[4]-'0')*10+(exp[5]-'0');
int d=(exp[6]-'0')*10+(exp[7]-'0');
int days;
int flag=1;
while(1)
{
if((y%4==0 && y%100!=0 )|| y%400==0) // 判断是否是闰年
days=366;
else
days=365;
d++;
if((m==2 && d==29 && days==366) || ( m==2 && d==28 && days==365))
{
m++;
d=0;
}
if( (m==1 || m==3 || m==5 || m==7 || m==8 || m==10) && d==31)
{
m++;
d=0;
}
if( (m==4 || m==6 || m==9 || m==11 )&& d==30)
{
m++;
d=0;
}
if(m==12 && d==31)
{
m=1;
d=0;
y++;
}
if(flag==1 &&y/1000==d%10 && y/100%10==d/10 && y/10%10==m%10 && y%10==m/10)
{
flag=0;
cout<<y;
if(m<10)
cout<<"0"<<m;
else
cout<<m;
if(d<10)
cout<<'0'<<d<<endl;
else
cout<<d<<endl;
}
if(y/1000==d%10 && d%10==y/10%10 && y/10%10==m%10 && y/100%10==d/10 && d/10==y%10 && y%10==m/10)
{
cout<<y;
if(m<10)
cout<<"0"<<m;
else
cout<<m;
if(d<10)
cout<<'0'<<d;
else
cout<<d;
break;
}
}
return 0;
}
试题 H: 子串分值和
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
代码:
#include<iostream>
#include<string>
using namespace std;
int f(string exp)
{
int len=exp.length();
for(int i=0;i<exp.length();i++)
{
for(int j=i+1;j<exp.length();j++)
{
if(exp[i]==exp[j])
{
len--;
}
}
}
return len;
}
int main()
{
string exp;
cin>>exp;
int couter=0;
for(int i=0;i<exp.length();i++)
{
for(int j=1;j<=exp.length()-i;j++)
{
string exp1;
exp1=exp.substr(i,j);
couter+=f(exp1);
}
}
cout<<couter;
return 0;
}
试题 I: 平面切分
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
代码:
#include<iostream>
using namespace std;
int check(int jiaodian[],int cnt)
{
int k=1;
for(int i=0;i<cnt;i++)
{
for(int j=i+1;j<cnt;j++)
{
if(jiaodian[i]!=jiaodian[j])
k++;
}
}
return k;
}
int main()
{
int N;
cin>>N;
int i=0;
int A[1005],B[1005];
for(int i=0;i<N;i++)
{
cin>>A[i];
cin>>B[i];
}
int couter=N+1; //第一条直线把平面分成两部分
for(int i=1;i<N;i++) //i=1,从第二条直线开始
{
int jiaodian[10005]; //记录交点坐标
int cnt=0;
for(int j=0;j<i && j!=i;j++) //每一条直线与前面直线的交点
{
if(A[i]!=A[j]) //判断两直线斜率
{
jiaodian[cnt]=(B[j]-B[i])/(A[i]-A[j]); //记录交点横坐标
cnt++;
}
else
{
couter--;
break;
}
}
if(cnt!=0) //去掉重合的线
couter=couter+check(jiaodian,cnt);
}
cout<<couter;
return 0;
}
注意:未找到OJ来判断代码正误。