每日一练:

2024/9/14:

7.好数 - 蓝桥云课 (lanqiao.cn)

考点:暴力

#include <bits/stdc++.h>
#define ll long long

using namespace std;
/*
问题描述
一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位)上的数字是奇
数,偶数位 (十位、千位、十万位) 上的数字是偶数,我们就称之为"好数"。
给定一个正整数N,请计算从1到N一共有多少个好数。
*/
bool judge(ll num);

int ans=0;

int main() {
	ll N;
	cin>>N;
	for(ll i=1; i<=N; i++) {
		if(judge(i)) {
			ans++;
		}
	}

	cout<<ans;
	return 0;
}

bool judge(ll num) {
	int cnt=0;
	while(num>0) {
		if(cnt%2==0 && num%10%2==0) {
			return false;
		} else {
			num/=10;
			cnt++;
		}
		
		if(cnt%2==1 && num%10%2==1) {
			return false;
		} else {
			num/=10;
			cnt++;
		}
	}
	return true;
}
2024/9/15:

10.R 格式 - 蓝桥云课 (lanqiao.cn)

考点:高精度,模拟,高精度*低精度乘法

1、暴力骗分(50%的得分)

#include <bits/stdc++.h>
#define ll long long

using namespace std;

int main()
{
	int n;
	double d;
	cin>>n>>d;
	
	double ans;
	ans=round(ans=d*pow(2,n));
	
	printf("%.0lf", ans);
	return 0;
}

2、标准解法

#include <bits/stdc++.h>
#define ll long long
#define N 2010
using namespace std;


string s;
int a[N];

int main()
{
	int n;
	cin>>n>>s;
	
	reverse(s.begin(), s.end());
	
	int pos=s.find(".");
	s.erase(pos, 1);
	
	int len=s.size();
	
	for(int i=0; i<len; i++) {
		a[i+1]=s[i]-'0';
	}
	
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=len; j++) {
			a[j]*=2;
		}
		
		for(int j=1; j<=len; j++) {
			if(a[j]>=10) {
				a[j+1]++;
				a[j]%=10;
				if(j==len) {
					len++;
				}
			}
		}
	}
	
	if(a[pos]>=5) {
		a[pos+1]++;
	}
	
	for(int i=len; i>=pos+1; i--) {
		cout<<a[i];
	}
	return 0;
}

2024/9/16:

0合根植物 - 蓝桥云课 (lanqiao.cn)

考点:并查集

#include <bits/stdc++.h>
#define ll long long

const int N=1e6+10;

using namespace std;

ll fa[N], size[N], pre[N];

void init() {
	//初始化father数组
	for(int i=0; i<N; i++) {
		fa[i]=i;
	}
}

int find(int i) {
	if(fa[i]==i) {
		//i的根找到,返回其根的序号
		return i;
	}
	return fa[i]=find(fa[i]);//否则就递归直到找到根
}

bool isSameRoot(int x, int y) {
	return find(x)==find(y);
}

void union_(int x, int y) {
	//合并两个集合
	if(!isSameRoot(x, y)) {
		//x所在的集合的根改为y集合所在的根
		fa[find(x)]=find(y);
	}
}

int main()
{
	ll m, n, k;
	cin>>m>>n>>k;
	
	init();
	
	while(k--) {
		int a, b;
		cin>>a>>b;
		union_(a, b);
	}
	
	int ans=0;//连通分量
	//for遍历查看一共有几个不同的分量
	for(int i=0; i<m*n; i++) {
		if(find(i)==i) {
			ans++;
		}
	}
	
	cout<<ans;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值