1.门牌制作
代码:
#include <stdio.h>
int main()
{ int num(int aim);
int sum=0;
for(int i=1;i<=2020;i++)
sum=sum+num(i);
printf("%d",sum);
return 0;
}
int num(int aim){
int i=0;
for(i=0;aim!=0;aim=aim/10)
{
if(aim%10==2)
i++;
}
return i;
}
答案:624
B.既约分数
#include <iostream>
using namespace std;
int main()
{
int sum=0;
int gcb(int a, int b);
for(int i=1;i<=2020;i++)
for(int j=1;j<=2020;j++)
{
if(gcb(i,j)==1)
sum++;
}
cout << sum ;
return 0;
}
int gcb(int a,int b)
{
if(b==0)
return a;
else
return gcb(b,a%b);
}
答案:2481215
C:蛇形填数
#include <iostream>
using namespace std;
int main()
{
int array[100][100]={0},status=1,i=1,j=1,next=2,flag=2;
array[1][1]=1;
while(i<50 && j<50)
{
if(status%2!=0)
{
if(flag==1)
{
j=j+1;
array[i][j]=next++;
flag=2;
}
else
{
if(j>1)
{
i++;
j--;
array[i][j]=next++;
}
else
{
status=2;
flag=1;
}
}
}
else
{
if(flag==1)
{
i=i+1;
array[i][j]=next++;
flag=2;
}
else
{
if(i>1)
{
i--;
j++;
array[i][j]=next++;
}
else
{
status=1;
flag=1;
}
}
}
}
cout << array[20][20] << endl;
return 0;
}
答案: 761
D:跑步锻炼
#include <iostream>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check_year(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return true;
return false;
}
int main()
{
int year=2000,month=1,day=1,star=6,num=0,s_num=0;
for(year=2000;year<=2020;year++)
{
month=month%12;
for(month=1;month<=12;month++)
{
if(year==2020 && month==10)
{
s_num++;
break;
}
if(!check_year(year)|| check_year(year) &&month!=2)
for(day=1;day<=m[month];day++)
{
if(star>7)
star=1;
if(day==1 || star==1)
{
s_num++;
}
else
num++;
star++;
}
else if(month==2 && check_year(year))
{
for(day=1;day<=29;day++)
{
if(star>7)
star=1;
if(year==2004 && month== 3&& day==29)
cout << star << ' ' ;
if(day==1 || star==1)
s_num++;
else
num++;
star++;
}
}
}
}
cout << num+s_num*2 ;
return 0;
}
答案:8879
E:七段码
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<int> v[8];
int color[8]={0,0,0,0,0,0,0,0};
int main()
{
int sum=0;
void init();
int bfs();
for(color[1]=0;color[1]<=1;color[1]++)
for(color[2]=0;color[2]<=1;color[2]++)
for(color[3]=0;color[3]<=1;color[3]++)
for(color[4]=0;color[4]<=1;color[4]++)
for(color[5]=0;color[5]<=1;color[5]++)
for(color[6]=0;color[6]<=1;color[6]++)
for(color[7]=0;color[7]<=1;color[7]++)
{
init();
sum=sum+bfs();
}
cout << sum ;
}
int bfs()
{
int trace[8]={0};
for(int i=1;i<=7;i++)
{
if(color[i]==1)
{
queue<int> s;
s.push(i);
trace[i]=1;
while(!s.empty())
{
int now=s.front();;
s.pop();
for(int i=0;i<v[now].size();i++)
{
int next=v[now][i];
if(color[next]==1 && trace[next]!=1)
{
s.push(next);
trace[next]=1;
}
}
}
for(int i=1;i<=7;i++)
if(trace[i]!=color[i])
return 0;
return 1;
}
}
return 0;
}
void init()
{
v[1].push_back(2);
v[1].push_back(6);
v[2].push_back(1);
v[2].push_back(7);
v[2].push_back(3);
v[3].push_back(2);
v[3].push_back(4);
v[3].push_back(7);
v[4].push_back(3);
v[4].push_back(5);
v[5].push_back(4);
v[5].push_back(6);
v[5].push_back(7);
v[6].push_back(1);
v[6].push_back(7);
v[6].push_back(5);
v[7].push_back(2);
v[7].push_back(3);
v[7].push_back(5);
v[7].push_back(6);
}
答案:80
F:成绩统计
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> score;
int n,pass=0,ex=0;
cin >> n;
for(int i=0;i<n;i++)
{
int a;
cin >> a;
if(a>=60)
pass++;
if(a>=85)
ex++;
}
printf("%.0lf%%\n%.0lf%%\n", (double)(pass)*100/n , (double)(ex)*100/n);
return 0;
}
G:回文日期
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int num=0,nowday,nowmonth,nowyear;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check_year(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return true;
return false;
}
void isright(int year,int month,int day)
{
if(year==nowyear)
{
if(month<nowmonth)
return ;
else if(month==nowmonth)
if(day<=nowday)
return ;
}
int now=year*10000+month*100+day;
vector<int> false1;
vector<int> right1;
while(now!=0)
{
if(now>=10)
right1.push_back(now-(now/10)*10);
else
right1.push_back(now);
now=now/10;
}
for(int i=0;i<right1.size();i++)
false1.push_back(right1[i]);
reverse(right1.begin(),right1.end());
for(int i=0;i<right1.size();i++)
if(false1[i]!=right1[i])
return ;
if(num==0)
{
printf("%d%02d%02d\n",year,month,day);
num++;
if(right1[0]==right1[2] && right1[1]==right1[3] && right1[3]==right1[4] && right1[2]==right1[5] && right1[4]==right1[6] &&right1[5]==right1[7])
{
printf("%d%02d%02d\n",year,month,day);
num++;
}
}
else
{
if(right1[0]==right1[2] && right1[1]==right1[3] && right1[3]==right1[4] && right1[2]==right1[5] && right1[4]==right1[6] &&right1[5]==right1[7])
{
printf("%d%02d%02d\n",year,month,day);
num++;
}
}
}
int main()
{
int n,day,month,year,a,b,flag=0;
cin >> n;
nowyear=n/10000;
nowmonth=(n-nowyear*10000)/100;
nowday=n-nowyear*10000-nowmonth*100;
a=nowmonth;
b=nowday;
for(year=nowyear;;year++)
{
for(month=1;month<=12;month++)
{
if(!check_year(year)|| check_year(year) && month!=2)
{
for(day=1;day<=m[month];day++)
isright(year,month,day);
if(num==2)
return 0;
}
else if(month==2 && check_year(year))
{
for(day=1;day<=29;day++)
isright(year,month,day);
if(num==2)
return 0;
}
}
}
return 0;
}
H:子串分值和
#include <iostream>
#include<set>
#include<cstring>
using namespace std;
int subset(int n,string a)
{
set<char> sub;
int sum=0;
char temper=a[0];
for(int j=0;j<n;j++)
for(int i=j;i<n;i++)
{
for(int z=j;z<=i;z++)
sub.insert(a[z]);
sum+=sub.size();
sub.clear();
}
return sum;
}
int main()
{
string w;
cin >> w;
cout << subset(w.size(),w);
return 0;
}
I:平面划分
#include <iostream>
#include <vector>
#include <map>
#include <set>
using namespace std;
set< pair<double,double> > point;
set< pair<double,double> > line;
int main()
{
int sum=1;
int num(pair<double,double> point);
int n;
cin >> n;
for(int i=0;i<n;i++)
{
int k,b,pre=line.size();
cin >> k >> b;
pair<double,double> now(k,b);
line.insert(now);
if(line.size()==pre)
continue;
else
{
sum++;
sum=sum+num(now);
}
}
cout << sum ;
return 0;
}
int num(pair<double,double> now)
{
int sum=0;
pair<double, double> x_point;
for (auto it : line)
{
double k2,b2;
k2=it.first,b2=it.second;
double k1,b1;
k1=now.first,b1=now.second;
if(k2!=k1)
{
x_point.first=(-(b1-b2))/(k1-k2);
x_point.second=x_point.first*k1+b1;
point.insert(x_point);
}
}
sum=sum+point.size();
point.clear();
return sum;
}