zoukankan      html  css  js  c++  java
  • Supreme Number(找规律,打表)

    A prime number (or a prime) is a natural number greater than 111 that cannot be formed by multiplying two smaller natural numbers.

    Now lets define a number NNN as the supreme number if and only if each number made up of an non-empty subsequence of all the numeric digits of NNN must be either a prime number or 111.

    For example, 171717 is a supreme number because 111, 777, 171717 are all prime numbers or 111, and 191919 is not, because 999 is not a prime number.

    Now you are given an integer N (2≤N≤10100)N (2 leq N leq 10^{100})N (2≤N≤10100), could you find the maximal supreme number that does not exceed NNN?

    Input

    In the first line, there is an integer T (T≤100000)T (T leq 100000)T (T≤100000) indicating the numbers of test cases.

    In the following TTT lines, there is an integer N (2≤N≤10100)N (2 leq N leq 10^{100})N (2≤N≤10100).

    Output

    For each test case print "Case #x: y", in which xxx is the order number of the test case and yyy is the answer.

    样例输入

    2
    6
    100

    样例输出

    Case #1: 5
    Case #2: 73

    题目来源

    ACM-ICPC 2018 沈阳赛区网络预赛

    题意:找到N以内最大的supreme number:此数为1或素数,且该数的子序列也是1或素数(不按顺序,随机重组);

    可以发现1位数有:1,2,3,5,7;2位数有:11,13,17,23,31,37,53,71,73;3位数有:113,131,137,173,311,317;

    代码如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
        int a[20] = {1,2,3,5,7,11,13,17,23,31,37,53,71,73,113,131,137,173,311,317};
        int s;
        int t,count = 1;
        cin >> t;
        while(t--)
        {
            cin >> s;
            cout << "Case #" << count++ << ": " ;
            if(s >= 317)
            {
                cout << a[19] << endl;
                continue;
            }
            else
            {
                for(int i = 19;i >= 0;i --)
                 {
                     if(s >= a[i])
                     {
                         cout << a[i] << endl;
                         break;
                     }
                 }
            }
        }
        return 0;
    }
    

    刚开始我错了很多次的代码是这样的:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
        int a[20] = {1,2,3,5,7,
        11,13,17,23,31,37,53,71,73,
        113,131,137,173,311,317};
        int s;
        int t,count = 1;
        cin >> t;
        while(t--)
        {
            cin >> s;
            cout << "Case #" << count++ << ": " ;
            if(s >= 317)
            {
                cout << a[19] << endl;
                continue;
            }
            else
            {
                for(int i = 19;i >= 0;i --)
                 {
                     if(s >= a[i])
                     {
                         cout << a[i] << endl;
                         break;
                     }
                 }
            }
        }
        return 0;
    }
    

    在数组里加了不必要的换行;。。。。。。。。

    我用的是codeblocks,可以正常运行,提交的时候就不对了。。。。。

    还是基础不行啊。

  • 相关阅读:
    如何分析损益表
    如何修改windows 2008(R2)的远程桌面连接数
    08年Gartner商务智能平台魔法四分区
    浅谈BI项目——为失败BI项目解惑(转IT168)
    商业智能项目错误经验总结(三) 需求调研
    asp.net学习笔记·Cookie
    C#安全调用线程的步骤
    一般处理程序学习初步——最简单的一般处理程序
    asp.net学习笔记·get与post区别
    C#中使用DES和AES加密解密
  • 原文地址:https://www.cnblogs.com/lu1nacy/p/10016634.html
Copyright © 2011-2022 走看看