2021年第十二届蓝桥杯C++B组省赛个人部分题解

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;
} 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值