1.门牌制作
#include<iostream> #include<string> using namespace std; int main() { int i; int sum = 0; for (i = 1; i <= 2020;++i) { int in = i; while (in) { if (in % 10 == 2) { ++sum; } in /= 10; } } cout << sum; return 0; }
624
2.既约分数
#include<iostream> using namespace std; int gcd(int a,int b){ return b==0?a: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; return 0; }
2481215
3.蛇形填数
#include<iostream> using namespace std; int main() { int i = 0; int j = 0; int cnt = 2; int a[250][250]; a[0][0] = 1; while (cnt <1000) { j++; while (i != -1 && j != -1) { a[i][j] = cnt++; if (j == 0) break; i++; j--; } i++; while (i != -1 && j != -1) { a[i][j] = cnt++; if (i == 0) break; i--; j++; } } cout << a[19][19]; return 0; }
761
4.跑步锻炼
#include <bits/stdc++.h> using namespace std; int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { int y=2000,m=1,d=1,w=6,ans=2; while(y!=2020||m!=10||d!=1) { if((y%4==0&&y%100!=0)||y%400==0) M[2]=29; else M[2]=28; d++; w=(w+1)%7; if(d>M[m]) { d=1; m++; if(m>12) { y++; m=1; } } if(d==1||w==1) ans++; ans++; } cout<<ans; }
8879
5.七段码
80
6.成绩统计
#include <bits/stdc++.h> using namespace std; int a[100010]; int n; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int num1=0,num2=0; for(int i=0;i<n;i++) { if(a[i]>=85) { num1++; } if(a[i]>=60 ) { num2++; } } cout<<round(num2*1.0/n*100)<<'%'<<endl; cout<<round(num1*1.0/n*100)<<'%'<<endl; }
7.回文日期
#include <bits/stdc++.h> using namespace std; int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool check(int data) { int year=data/10000; int month=(data/100)%100; int day=data%100; if(month<0 || month>12) return false; if(day==0 || month!=2 && day>days[month]) return false; if(month==2) { int leap=(year%4==0 && year%100 !=0) || (year%400==0); if(day>days[month]+leap) return false; } return true; } int main() { int data; int hui=0,abhui=0; int flag1=0,flag2=0; int s[9]={0}; int i,x; cin>>data; for(i=data+1;flag1==0||flag2==0;i++) { memset(s,0,8*sizeof(int)); if(check(i)) { x=i; for(int j=8;j>0;j--) { s[j]=x%10; x=x/10; } if(s[1]==s[8] && s[2]==s[7] &&s[3]==s[6] && s[4]==s[5] && flag1==0) { flag1=1; hui=i; } if(s[1]==s[3] &&s[1]==s[6] &&s[1]==s[8] && s[2]==s[4] && s[2]==s[5] && s[2]==s[7] && flag2==0) { flag2=1; abhui=i; } } } printf("%d\n%d",hui,abhui); return 0; }
8.子串分值和
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll pre[30]; string s; int main() { IOS; cin>>s; ll len=s.length(); s="0"+s;//下标从1开始 ll ans=0; for(ll i=1;i<=len;i++){ ans+=(i-pre[s[i]-'a'])*(len-i+1); pre[s[i]-'a']=i; } cout<<ans<<endl; getchar(); getchar(); return 0;
9.平面切分
#include<bits/stdc++.h> using namespace std; long double s[1010][2];//存储直线的A,B long long ans; bool st[1010]; //false表示不是重边 pair<long double,long double> p; int main(){ int n; cin>>n; for(int i=0;i<n;i++){ cin>>s[i][0]>>s[i][1]; set<pair<long double,long double> > points; for(int j=0;j<i;j++){ if(st[j])continue;//直线是重边,跳过 if(s[i][0]==s[j][0]){//两条直线斜率相等时,判断是平行还是重合 if(s[i][1]==s[j][1]){ st[i]=true;//待添加直线是重边,退出循环 break; }else continue;//直线平行,不需要计算交点 } p.first=(s[j][1]-s[i][1])/(s[i][0]-s[j][0]);//交点的x坐标 p.second=s[i][0]*p.first+s[i][1];//交点的y坐标 points.insert(p); } if(!st[i])ans+=points.size()+1;//若当前直线不是重边,更新答案 } cout<<ans+1; return 0; }
10.字串排序
#include<bits/stdc++.h> using namespace std; int main(){ string s; int res=0; cin>>s; int i=1,j; for(;i<=s.length();i++){ int fr=i-0,ba=s.length()+1-i; for(j=i-1;j>0;j--){//向前 if(s[i-1]==s[j-1]){ fr=i-j; break; } } for(j=i+1;j<=s.length();j++){//向后 if(s[i-1]==s[j-1]){ ba=j-i; break; } } int n=fr*ba; res+=n; //printf("%d %d %d\n",fr,ba,n); } printf("%d",res); return 0; }