新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)- 杨老师的游戏

链接:https://www.nowcoder.com/acm/contest/116/B
来源:牛客网

题目描述

杨老师给同学们玩个游戏,要求使用乘法和减法来表示一个数,他给大家9张卡片,然后报出一个数字,要求大家用表达式的形式来表示出这个数
100 可以表示为这样的形式:100 = 129*67-8543 , 还可以表示为:100 = 13*489-6257
注意特征:表达式中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的表达式,100 有 20 种表示法。
题目要求:
从标准输入读入一个正整数N(N<1000 * 1000)
程序输出该数字用数码1~9不重复不遗漏地组成的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!

输入描述:

一个正整数N

输出描述:

输出有多少种表示法
示例1

输入

100

输出

20

备注:

注意只有一个乘法和一个减法,*号保证在-的前面
注意只有一个乘法和一个减法,*号保证在-的前面




题意:中文题


思路:签到题,直接暴力搜索:
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int flag[100];
int sum;
int n;
string shuzi[10]={"0","1","2","3","4","5","6","7","8","9"};
void dfs(int num,string s){
        if(num==9){
                //cout<<"s=="<<s<<endl;
                for(int i=0;i<7;i++){
                        int num1=0;
                        int num2=0;
                        int num3=0;
                        for(int k=0;k<=i;k++){
                                num1=num1*10+s[k]-'0';
                        }
                        for(int j=i+2;j<9;j++){
                                num2=num3=0;
                                for(int l=i+1;l<j;l++){
                                       num2=num2*10+s[l]-'0';
                                }
                                for(int p=j;p<9;p++){
                                        num3=num3*10+s[p]-'0';
                                }
                                //cout<<"num1=="<<num1<<"  num2=="<<num2<<" num3=="<<num3<<endl;
                                if((num1*num2-num3)==n)sum++;
                        }
                }
                return;
        }
        for(int i=1;i<=9;i++){
                if(flag[i]==0){
                        string ss=s+shuzi[i];
                        flag[i]=1;
                        dfs(num+1,ss);
                        flag[i]=0;
                }
        }
}
int main()
{
        cin>>n;
        sum=0;
        memset(flag,0,sizeof(flag));
        string s="";
        dfs(0,s);
        cout<<sum<<endl;
        return 0;
}
 
原文地址:https://www.cnblogs.com/luowentao/p/8976929.html