蓝桥杯训练题No.6

#include<bits/stdc++.h>
using namespace std;
signed main ()//正在研究signed
{
    int n; cin>>n;
    cout.fill('0');//不足位数补0
    cout << setw(2)<<n;//setw(n)输出n位
    return 0;
}

Q1:你有一架天平和 NN 个砝码,这 NN 个砝码重量依次是 W_1, W_2, · · · , W_N 。计算一共可以称出多少种不同的重量? 砝码可以放在天平两边。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
ll a[100005];
ll w[105];

int main() {
	int n; cin>>n;
	for(ll i = 0; i < n; i++) cin>>w[i];

	a[0] = 1;
	memset(a, 0, sizeof(a));
	
	for(ll i = 0; i < n; i++) {
		for(ll j = 100000; j >= max[i]; j--) {
			a[j] = max(a[j], a[j - w[i]]);
		}
	}
	
	for(ll i = 0; i < n; i++) {
		for(ll j = 1; j <= 100000 - w[i]; j--) {
			a[j] = max(a[j], a[j - w[i]]);
		}
	}
	ll sum = 0;
	for(ll i = 1; i <= 100000; i++) {
		sum+=a[i];
	}
	cout<<sum<<endl;

	return 0;
}

Q2:求第20行、第二十列的数字
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
signed main()
{
    int r = 1 , c = 1 , ans = 1;
    while(r != 20 || c != 20){
        if(r == 1){
            if(c & 1) c ++ ;//按位与判断奇偶数(结果0为偶数,1为奇数) 
            else r ++ , c --;
        }
        else if(c == 1){
            if(r % 2 == 0) r ++;
            else r -- , c ++;
        }
        else if((r + c) % 2) r ++ , c -- ;
        else r -- , c ++ ;
        ans ++ ;
    }
    cout << ans << '\n';
    return 0;
}

Q3:正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初一,跑2 千米。如果同时是周一或月初,小蓝也是跑 2 千米.从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11日周四(含)。请问这段时间小蓝总共跑步多少千米?

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

bool check(int i) {
	if(i%400 == 0||i%4 == 0&&i%100 === 0) {
		return true;
	}else return false;
}

signed main() {
	int ans = 0, week = 6;
	int a[12] = {31, 28, 31, 30, 31, 30, 31, 30, 31, 31, 30, 31};
	
	for(int i = 2000; i <= 2020; i++) {
		if(check(i)) a[2] = 29;
		else a[2] = 28;//如果去掉,2月则不能复位
		for(int j = 1; j <= (i == 2020?10:12); j++){
			if(i == 2020&&j == 10) d[j] = 1;
			for(int day = 1; day <= d[j]; day++) {
				if(week == 1||day == 1) ans+=2;
				else ans++;
				week = (week + 1)%7;
			}
	}
	cout<<ans;
	return 0;
}

Q4:七段码问题
数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f,g选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。请问,可以用七段码数码管表达多少种不同的字符?

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

int a[7][7] = {
	{0, 1, 0, 0, 0, 1, 0},
	{1, 0, 1, 0, 0, 0, 1},
	{0, 1, 0, 1, 0, 0, 1},
	{0, 0, 1, 0, 1, 0, 0},
	{0, 0, 0, 1, 0, 1, 1},
	{1, 0, 0, 0, 1, 0, 1},
	{0, 1, 1, 0, 1, 1, 0}
};

int choose[7];
int visited[7];

void dfs(int k) {
	for(int i = 0; i < 7<; i++) {
		if(a[k][i]&&choose[i]&&!visited[i]) {
			visited[i] = 1;dfs(i);
		}
	}
}

int main() {
	//ofstream cout("result.out");
	int i, j, k, ans = 127;
	for(i = 1; i < 127; i++) {
		memset(choose, 0, sizeof(choose));
		memset(visited, 0, sizeof(visited));

		x = i; j = 0;
		while(x) {
			if(x%2) choose[j] = 1;
			x /= 2;
		}

		k = 0; 
		while(!choose[k]) k++;
		visited[k] = 1; dfs(k);
		for(int j = 0; j < 7; j++) {
			if(!visited[j]&&choose[j]) break;
		}
		if(j < 7) ans--;
	//	else{
	//		char c;
	//		for(int m = 0; m < 7; m++) {
	//			if(choose[m]){
	//				c = 'a' + m;
	//				cout<<c;
	//			}
	//		}cout<<endl;
	//	}
	}
	cout<<ans;
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值