【計蒜客】2017藍橋杯模擬賽(四)

Bonstoppo發表於2019-03-16

1.結果填空:數列的首項(水題)

#include<iostream>
using namespace std;
int main(){
	printf("%d" , (275 / 5 - 27) / 2);
	return 0;
}

 

2.結果填空:特殊的四位數(水題)

#include<iostream>
using namespace std;
int main(){
	for(int i = 1 ; i <= 9 ; i ++){
		for(int j = 0 ; j <= 9 ; j ++){
			for(int k = 0 ; k <= 9 ; k ++){
				for(int l = 1 ; l <= 9 ; l ++){
					if(i != j && i != k && i != l && j != k && j != l && k != l
						&& i * i * i * i + j * j * j * j + k * k * k * k + l * l * l * l == i * 1000 + j * 100 + k * 10 + l)
						printf("%d\n" , i * 1000 + j * 100 + k * 10 + l);
				}
			}
		}
	}
	return 0;
}

 

3.結果填空:方格填數(暴力)

藍橋杯暴力的極致體現。

#include<iostream>
using namespace std;

int g[15];
int sum = 0;
int main(){
	for(int i = 0 ; i <= 9 ; i ++){
		for(int j = 0 ; j <= 9 ; j ++){
			for(int k = 0 ; k <= 9 ; k ++){
				for(int l = 0 ; l <= 9 ; l ++){
					for(int a = 0 ; a <= 9 ; a ++){
						for(int b = 0 ; b <= 9 ; b ++){
							for(int c = 0 ; c <= 9 ; c ++){
								for(int d = 0 ; d <= 9 ; d ++){
									for(int e = 0 ; e <= 9 ; e ++){
										for(int f = 0 ; f <= 9 ; f ++){
											g[0] = i , g[1] = j ,g[2] = k ,g[3] = l ,g[4] = a ,g[5] = b ,g[6] = c , g[7] = d ,g[8] = e ,g[9] = f;
											if(g[0] + g[5] == g[2] + g[7] && g[2] + g[7] == g[4] + g[9] && g[0] + g[5] == g[4] + g[9] && g[1] + g[6] == g[3] + g[8]
												&& g[0] != g[1] && g[0] != g[2] && g[0] != g[3] && g[0] != g[4] && g[0] != g[5] && g[0] != g[6] && g[0] != g[7] && g[0] != g[8] && g[0] != g[9]
												&& g[1] != g[2] && g[1] != g[3] && g[1] != g[4] && g[1] != g[5] && g[1] != g[6] && g[1] != g[7] && g[1] != g[8] && g[1] != g[9] 
												&& g[2] != g[3] && g[2] != g[4] && g[2] != g[5] && g[2] != g[6] && g[2] != g[7] && g[2] != g[8] && g[2] != g[9]
												&& g[3] != g[4] && g[3] != g[5] && g[3] != g[6] && g[3] != g[7] && g[3] != g[8] && g[3] != g[9]
												&& g[4] != g[5] && g[4] != g[6] && g[4] != g[7] && g[4] != g[8] && g[4] != g[9]
												&& g[5] != g[6] && g[5] != g[7] && g[5] != g[8] && g[5] != g[9]
												&& g[6] != g[7] && g[6] != g[8] && g[6] != g[9]
												&& g[7] != g[8] && g[7] != g[9]
												&& g[8] != g[9]){
													sum ++;
												}
											}		
										}
									}
								}
							}
						}
					}
				}
			}
		}
	printf("%d" , sum);
	return 0;
	}
	

 

4.程式碼填空:列印菱形(數學)

注意這個地方的j & 1相當巧妙。但是這個問題用不上。

#include <stdio.h>
#include <string.h>

void f(int n) {
	for (int i = 0; i < n * 2 - 1; ++i) {
		int k =  n > (i + 1) ? i  : 2 * n - 2 - i ; // ²¹È«Õâ¾ä´úÂë
		for (int j = 0; j < n - k - 1; ++j) {
			printf(" ");
		}
		for (int j = 0; j < k * 2 + 1; ++j) {
			if (j&1) {
				printf(" ");
			} else {
				printf("*");
			}
		}
		printf("\n");
	}
}

int main() {
	f(14);
	return 0;
}

 

8.程式設計:插花 (貪心)

#include<iostream>
using namespace std;
int main(){
    int n;
    scanf("%d" , &n);
    getchar();
    char a[300005];
    scanf("%s" , a);
   	int sum = 0 , pos = n - 1;//pos代表最後要放入的那個位置//
    for(int i = 2 * n - 1 ; i >= pos ; i --){//從最後一個數字開始到目前要放的那個位置//
        if(a[i] == '1'){
            sum += (i - pos);
            pos --;
        }
    }
    printf("%d" , sum);
    return 0;
}

6.worse

#include<iostream>
using namespace std;

int mul = 1;
int dx[4] = {0 , 1 , 0 , -1};
int dy[4] = {1 , 0 , -1 , 0};
int g[10][10] = { 0 };
bool v[10][10] = { 0 };
void dfs(int x , int  y , int sum , int m){
	if(sum > 24){
		return ;
	}
	if(m > mul){
		mul = m;
	}
	v[x][y] = 1;
	m *= g[x][y];
	for(int i = 0 ; i < 4 ; i ++){
		int sx = x + dx[i];
		int sy = y + dy[i];
		if( v[sx][sy] == 0 && sx <= 5 && sy <= 5 && sx >= 1 && sy >= 1){
			v[sx][sy] = 1;
			dfs(sx , sy , sum + g[sx][sy] , m);
		}
		v[x][y] = 0;
	}
}

 

相關文章