【藍橋杯】計蒜客2017模擬賽A習題整理

Bonstoppo發表於2019-03-05

1.結果填空:摺紙(long long)

輸出的不老練,還是分開自己在加一下吧。

#include<iostream>
using namespace std;
int main(){
	long long sum = 1 ;
	int s = 0;
	for(int i = 1 ; i <= 20 ; i ++){
		sum *= 2;
	}
	for(int i = 1 ; i <= 20 ; i ++){
		s = s * 2 + 1;
	}
	printf("%lld\n" , sum);
	printf("%f" , s * 0.5);
	return 0;
}

 

2.結果填空:分餅乾(暴力)

沒啥說的,暴力就行了。

#include<iostream>
using namespace std;
int main(){
	for(int i = 20000 ; i <= 1000000000 ; i ++){
		if(i % 113 == 60 && i % 233 == 150 && i % 666 == 233){
			printf("%d" , i);
			break;
		}
	}
	return 0;
}

 

3.結果填空:小學生數學(暴力)

暴力。

#include<iostream>
#include<cstring>
using namespace std;
int sum = 0;
bool flag[10];
int main(){
	for(int a = 1 ; a <= 9 ; a ++)
	for(int b = 0 ; b <= 9 ; b ++)
	for(int c = 1 ; c <= 9 ; c ++)
	for(int d = 0 ; d <= 9 ; d ++)
	for(int e = 0 ; e <= 9 ; e ++)
	for(int f = 1 ; f <= 9 ; f ++)
	for(int g = 0 ; g <= 9 ; g ++)
	for(int h = 0 ; h <= 9 ; h ++)
	for(int i = 0 ; i <= 9 ; i ++)
	for(int j = 0 ; j <= 9 ; j ++)
	if((a * 10 + b) * (c * 100 + d * 10 + e) == f * 10000 + g * 1000 + h * 100 + i * 10 + j){
	if(a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i && a != j)
	if(b != c && b != d && b != e && b != f && b != g && b != h && b != i && b != j){
	if(c != d && c != e && c != f && c != g && c != h && c != i && c != j){
	if(d != e && d != f && d != g && d != h && d != i && d != j){
	if(e != f && e != g && e != h && e != i && e != j){
	if(f != g && f != h && f != i && f != j){
	if(g != h && g != i && g != j){
	if(h != i && h != j){
	if(i != j){
		sum ++;
	}
	}
	}
	}
	}
	}
	}
	}
	printf("%d" , sum);
	return 0;							
}

 

4.程式碼填空:聖誕樹(找規律)

按照行來輸出,必定數值是和i,j有關的,所以拉出來找規律就好了。

#include <stdio.h>

void christmas_tree(int n) {
    for (int i = 1; i <= n; ++i) { // 聖誕樹的層數
        for (int j = 1; j <= n; ++j) { // 每一層小層
            int space_cnt =  16 - 2 * (i - 1) - j; // 填寫必要程式碼
            int tree_cnt =  1 + (i - 1) * 4 + 2 * (j - 1); // 填寫必要程式碼
            for (int k = 0; k < space_cnt; ++k) {
                putchar(' ');
            }
            for (int k = 0; k < tree_cnt; ++k) {
                putchar('*');
            }
            putchar('\n');
        }
    }
    for (int i = 1; i < 3 * (n - 1); ++i) {
        putchar(' ');
    }
    puts("***");
    for (int i = 1; i < 3 * (n - 1); ++i) {
        putchar(' ');
    }
    puts("***");
    for (int i = 1; i < 3 * (n - 1); ++i) {
        putchar(' ');
    }
    puts("***");
}

int main() {
    christmas_tree(6);
    return 0;
}

 

7.結果填空:簡單的劃分數(DFS)

【新】新的一種DFS模板,如果超過了邊界就直接退出。以前從來沒有這麼幹過。

這種題目如果只是一個填空題的話可以直接暴力解決,不必上動態規劃了。

#include<iostream>
using namespace std;

int a = 0;

void dfs(int x , int s){
	if(s == 80){//達到目標的時候// 
		a ++;
		return ;
	}
	if(s > 80)//未達到目標的時候// 
		return ;
	for(int i = x ; i <= 80 ; i ++){//dfs// 
		dfs(i , s + i);
	}
}
int main(){
	dfs(1 , 0);
	printf("%d" , a);
	return 0;
}

 

8.程式設計:彈簧板(DP)

簡單的dp問題,這個地方的dp是倒著彈回來的,所以不是上一個狀態,需要按照下一個狀態往前推。

#include<iostream>
using namespace std;
const int MAXN = 100005;

int a[MAXN] , dp[MAXN] = { 0 };//dp表示目前的狀態的最大彈的數值//
int res = 0;

int main(){
    int n;	
    scanf("%d" , &n);
    for(int i = 1 ; i <= n ; i ++){
        scanf("%d" , &a[i]);
    }
    for(int i = n ; i >= 1 ; i --){
        dp[i] = dp[i + a[i]] + 1;
        res = max(dp[i] , res);
    }
    printf("%d" , res);
    return 0;
}

寫不動了。。。。完了接著補

相關文章