A空间
答案:67108864
#include<bits/stdc++.h>
using namespace std;//结果:67108864
int main(){
cout<<256*1024*1024/4;
return 0;
}
B卡片
答案:3181
#include<bits/stdc++.h>
using namespace std;//答案:3181
int use[20]={2021,2021,2021,2021,2021,2021,2021,2021,2021,2021};
int jud(){
for(int i=0;i<=9;i++){
if(use[i]==0){
return 1;
}
}
return 0;
}
int main(){
int a,b,c,d,i;
for(i=1;i<10000;i++){//当已使用完则跳出循环
a=i/1000,b=(i/100)%10,c=(i/10)%10,d=i%10;
if(i<10){
use[d]--;
}
else if(i<100){
use[c]--;
use[d]--;
}
else if(i<1000){
use[b]--;
use[c]--;
use[d]--;
}
else if(i<10000){
use[a]--;
use[b]--;
use[c]--;
use[d]--;
}
if(jud()){
break;
}
}
cout<<i;
return 0;
}
C直线
这一题我愿称之为玄学,也许这样写只是碰对的。。
答案:40257
#include<bits/stdc++.h>
using namespace std;
const int N=30;//思路:通过四个for循环计算出每个整数点之间可练成的线,斜率和截距用pair放入set中,自动去重。
int main(){
pair<double,double>p;
set< pair<double,double> >s;
for(int i=0;i<20;i++){
for(int j=0;j<21;j++){
for(int m=0;m<20;m++){
for(int n=0;n<21;n++){
if(i!=m||j!=n){//(i,j),(m,n)是同一点则不必计算
p.first=1.0*(n-j)/(m-i);//斜率不存在时m-i=0,first结果为inf,second结果为0;斜率为0时first为0,second为-nan(0x8000000000000),调试图片放在下面 ;
p.second=1.0*(m*j-i*n)/(n-j);//截距计算不能p.second=1.0*j-p.first*i (由于浮点数的精度问题判重会出现问题,待解)
s.insert(p);
}
}
}
}
}
cout<<s.size();
return 0;
}
D货物摆放
答案:2430
#include<bits/stdc++.h>
using namespace std;
const long long N=2021041820210418;
int main(){
int ans=0,b=0;
long long a[10000];
for(long long i=1;i<=sqrt(N);i++){//枚举所有因子 ,只需枚举到N开方
if(N%i==0){//若为因子,存入数组
a[b]=i;
b++;
a[b]=N/i;
b++;
}
}
for(long long i=0;i<b;i++){
for(long long j=0;j<b;j++){
for(long long k=0;k<b;k++){
if(a[i]*a[j]*a[k]==N){
ans++;
}
}
}
}
cout<<ans<<endl;
return 0;
}