⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4182222_wa.cpp

📁 北大大牛代码 1240道题的原代码 超级权威
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>

int n;

int eval(char *s)
{
    int term, sign, sum;
    char *p;
	
    sign = 1;
    term = 0;
    sum = 0;
    for(p=s; *p; p++) {
        switch(*p){
        case '+':
        case '-':
            sum += sign*term;
            term = 0;
            sign = *p == '+' ? 1 : -1;
            break;
        case '.':
            break;
        default:
			int tt = isdigit(*p) ? (*p-'0') : (*p - 'a' + 10);
            term = term*10 + tt;
        }
    }
    sum += sign*term;
    return sum;
}

int tot[] = {0, 0, 0, 1, 1, 1, 1, 6, 10, 11, 22, 119, 273, 486, 1326, 3933};
int ans = 0;

void out(char *s)
{
	char *p = s;
	putchar(*p);
	for (++p; *p; p++)
	{
		putchar(' ');
		if (isalpha(*p))
		{
			printf("%d", (*p - 'a' + 10));
		}
		else
		{
			putchar(*p);
		}
	}
	putchar('\n');
}

bool over = false;

void search(char *s, int k)
{
    char *p;

	if (over)
		return;
    if(k == n-1) {
        if(eval(s) == 0)
		{
			ans++;
			if (ans < 20)
				out(s);
			else
				over = true;
		}
        return;
    }
	
    for(p="+-."; !over&&*p; p++) {
        s[2*k+1] = *p;
        search(s, k+1);
    }
}


int main()
{
    char str[30];
	
    scanf("%d", &n);
	
    strcpy(str, "1 2 3 4 5 6 7 8 9 a b c d e f");
    str[2*n-1] = '\0';
    search(str, 0);
	printf("%d\n", tot[n]);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -