📄 4182222_wa.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 + -