填空题(位运算,循环,日期问题):
1.握手问题
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int sum=0;for(int i=49; i>=7; i--){sum+=i;}cout<<sum<<endl;return 0;
}
2.门派制作
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int sum=0;for(int i=1;i<=2020;i++){string temp=to_string(i);sum+=count(temp.begin(),temp.end(),'2');}cout<<sum<<endl;return 0;
}
3.小球反弹
//往外延伸t个相同矩形,当走到第t个长方形的左上角 就算是回到了左上角了
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int t=1,x=343720,y=233333;while(1){if((15*t)%x==0 && (17*t)%y==0) break;t++;}printf("%.2f",2*sqrt(15*t*15*t+17*t*17*t));return 0;
}
4.艺术与篮球
#include<bits/stdc++.h>
#define int long long
using namespace std;
bool fun(int x)
{int m[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};int year=x/10000,month=x%10000/100,day=x%10000%100;if(year%4==0 && year%100!=0 || year%400==0) m[2]+=1;if(year<2000 || year>2024) return false;if(month==0 || month>12) return false;if(day==0 || day>m[month]) return false;return true;
}signed main()
{int sum=0;map<int,int>p;p[0] = 13;p[1] = 1;p[2] = 2;p[3] = 3;p[4] = 5;p[5] = 4;p[6] = 4;p[7] = 2;p[8] = 2;p[9] = 2;for(int i=20000101; i<=20240413; i++){if(fun(i)) //判断是否为合法日期{int temp=i,sign=0;while(temp>0){sign+=p[temp%10];temp/=10;}if(sign>50){sum++;}}}cout<<sum<<endl;return 0;
}
5.幸运数
#include<bits/stdc++.h>
#define int long long
using namespace std;
bool fun(int x,int d)
{if(d%2!=0) return false;int sum1=0,sum2=0,d1=d/2,d2=d1;while(d1--){sum1+=x%10;x/=10;}while(d2--){sum2+=x%10;x/=10;}return sum1==sum2;
}
signed main()
{int sum=0;for(int i=1; i<=100000000; i++){int d=((int)log10(i)+1);if(fun(i,d)){sum++;}}cout<<sum<<endl;return 0;
}
6.平方差
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
set<int>nums;
int main()
{// for(int i=1;i<=2021;i++)// {// for(int j=0;j<=2021;j++)// {// for(int k=0;k<=j;k++)// {// if(i==(j*j-k*k))// {// nums.insert(i); // }// }// }// }// cout<<nums.size()<<endl;cout<<1516<<endl;return 0;
}
7.求和
#include <iostream>
using namespace std;
int main()
{string s;cin>>s;while(1){int sum=0;for(int i=0;i<s.size();i++){sum+=(s[i]-'0');}if(sum>=10) s=to_string(sum);else{cout<<sum;break;}}return 0;
}
8.九进制转十进制
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int n=2022,n1=0,yushu=0,base=1;while(n>0){yushu=n%10;n1+=yushu*base; //九进制位倍数 base*=9; n/=10;} cout<<n1<<endl; return 0;
}
9.3个1
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int sum=0;for(int i=1;;i++) {int sign=0,temp=i;while(temp>0){sign+=temp%2;temp/=2;}if(sign==3){sum++;}if(sum==23){cout<<i<<endl;break;}}return 0;
}
10.美丽的2024
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int n=2024,sum=0;while(n>0){sum+=n%2;n/=2;}cout<<sum<<endl;return 0;
}
11.特殊的数
#include<bits/stdc++.h>
#define int long long
using namespace std;
int fun(int n)
{int n1=0,yushu=0,base=1;while(n>0){yushu=n%10;n1+=yushu*base; //累加 base*=16; //倍数 n/=10;}return n1;
}
signed main()
{for(int i=10;; i++){if(fun(i)%i==0){cout<<i<<endl;break;}}return 0;
}
12.跑步
#include<bits/stdc++.h>
#define int long long
using namespace std;
int month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
signed main()
{int sum=0,w=6;for(int i=1; i<=12; i++){for(int day=1; day<=month[i]; day++){if(w==6 || w==0 || day==1 || day==11 || day==21 || day==31){sum++;}w=(w+1)%7;}}cout<<sum<<endl;return 0;
}
13.异或和之和
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
signed main()
{int n;cin>>n;vector<int>a(n);for(int i=0; i<n; i++){cin>>a[i];}int result=0;for(int i=20; i>=0; i--) //遍历位数 {int s=0,n0=1,n1=0; //s表示前缀和,n0表示偶数个数(保证奇数本身占1),n1奇数个数 for(int j=0; j<n; j++){int bit=(a[j]>>i)&1; //按位&,逐位判断0或1,计算贡献 s+=bit; if(s%2) //奇数 {result+=(1<<i)*n0; //合法个数(2^n0)*合法区间 n1++;}else{result+=(1<<i)*n1;n0++;}}}cout<<result<<endl;return 0;
}