zoukankan      html  css  js  c++  java
  • 新疆大学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;
    }
     
  • 相关阅读:
    disable_irq与disable_irq_nosync使用场景
    linux中断处理原理分析
    工作队列(workqueue) create_workqueue/schedule_work/queue_work
    使用git建立远程仓库,让别人git clone下来
    C中字符串的几种定义方法及说明
    Linux 2.6内核Makefile浅析
    探究platform_driver中的shutdown用途
    匆匆
    至强CPU性能排行,从X3210起,由低至高排列。
    Linux 命令行快捷键
  • 原文地址:https://www.cnblogs.com/luowentao/p/8976929.html
Copyright © 2011-2022 走看看