zoukankan      html  css  js  c++  java
  • codevs 1229 数字游戏

    1229 数字游戏

    http://codevs.cn/problem/1229/

    题目描述 Description
    Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间。  这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后,他叫同学随便写两个数字X和K。Lele要做的事情就是重新拼这些纸牌,组成数字 T ,并且 T + X 是 K 的正整数倍。 有时候,当纸片很多的时候,Lele经常不能在一节课之内拼出来,但是他又想知道答案,所以,他想请你帮忙写一个程序来计算答案。  
     
    输入描述 Input Description
    1. 第一行包含两个整数 N和M(0<N<9,0<M<2000),分别代表纸片的数目和询问的数目。  
    2. 第二行包含N个整数分别代表纸片上写的数字,每个数字可能取0~9。  
    3. 接下来有M行询问,每个询问给出两个整数X和K(0<=x<10^9,0<K<100)。 
    输出描述 Output Description
    1. 对于每次询问,如果能够用这些纸片拼出符合答案的T,就输出结果T。如果有多个结果,就输出符合要求的最小的T。  
    2. 如果不能拼出,就输出"None"。  
    样例输入 Sample Input

    4 3 

    1 2 3 4 

    5 7 

    33 6 

    12 8  

    样例输出 Sample Output

    1234

    None

    1324

    方便判断可以先让x模k,然后爆搜全排列,挨个判断,数据比较水,过了

    因为挨个搜出来的排列是单放在每个数组元素里的,最后需要的是整个数,

    可以①,用递归的方法将其转换成一个整数:

    int work(i)

    {     if(!i) return 0;

         return i+work(i)*10;

    }

    ②,还可以存储的时候用字符存储数字,最后用sscanf(s,"%d",&n),将字符串s转化为n,注意s要从下标0开始使用

    我的代码采用的是第二种方法:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[10];
    char s[10];
    int n,m,x,k,d;
    bool v[10],ok;
    char work(int p)
    {
        switch(a[p])
        {
            case 1:return '1';break;
            case 2:return '2';break;
            case 3:return '3';break;
            case 4:return '4';break;
            case 5:return '5';break;
            case 6:return '6';break;
            case 7:return '7';break;
            case 8:return '8';break;
            case 9:return '9';break;
            case 0:return '0';break;
        }
    }
    bool judge()
    {
        sscanf(s,"%d",&d);
        if((d+x)%k==0) return true;
        return false;
    }
    void dfs(int h)
    {
        if(ok) return;
        if(h>n)
        {
            ok=judge();
            return;
        }
        for(int i=1;i<=n;i++)
        {
            if(!v[i])
            {
                s[h-1]=work(i);//数字转化为字符,因为s下表要从0开始,所以h-1.注意不能用s[h-1]=char(i),这样得到的是i的ASCLL码 
                v[i]=true;
                dfs(h+1);
                v[i]=false;
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&x,&k);
            ok=false;
            x%=k;
            dfs(1);
            if(ok) printf("%d
    ",d);
            else printf("None
    ");
        }
    }
  • 相关阅读:
    MVC简介
    Scrapy中的item是什么
    Git删除文件操作
    vi编辑文件出现Can't open file for writing错误
    CentOs安装Scrapy出现error: Setup script exited with error: command ‘gcc’ failed with exit status 1错误解决方案
    Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
    激活MyEclipse 6.5方法-通过一段Java程序生成激活码
    oninput,onpropertychange,onchange的用法和区别【转载】
    Myeclipse6.5项目启动时由于数据库连接失败的错误日志
    IE和Firefox的Javascript兼容性总结
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6219098.html
Copyright © 2011-2022 走看看