牛客練習賽37.A

鏈接:https://ac.nowcoder.com/acm/contest/342/A
來源:牛客網

題目描述
筱瑪是個快樂的男孩子。
寒假終於到了,筱瑪決定請他的朋友們一起來快樂。
對於筱瑪來說,最快樂的事情莫過於翻看萬年曆上的日期了。
一個日期是“快樂”的,當且僅當這一年的年份是一個質數,且將月份、日期寫成"MM-DD"的形式後是對稱的。如:"2003-01-10"是“快樂”的。
筱瑪有n個小夥伴,每個小夥伴都會提出一個問題,即:從"2000-01-01"這一天開始,第k個“快樂”的日期是什麼。
輸入描述:
第一行一個整數n。
接下來n行,每行一個數字k,表示一次詢問。
輸出描述:
輸出共n行,每行一個形如"YYYY-MM-DD"的日期表示答案。
示例1
輸入
複製
3
1
23
48
輸出
複製
2003-01-10
2027-11-11
2063-12-21
備註:
1≤n≤106
保證答案存在且答案年份爲4位數。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;

const int maxn = 1e5;
int tot;                                    ///質數數組下標,數着質數個數
int pri[maxn];                              ///質數數組
bool is[maxn];                              ///定義一個bool類型數組,存放範圍內的數,後來全初始化爲1

void get_prime()
{
    tot = 0;
    memset(is, 1, sizeof(is));                ///bool類型數組全部初始化爲1(默認全爲質數)
    is[0] = is[1] = 0;
    for(int i = 2; i <= 9997; ++i)                 ///遍歷數組
    {
        if(is[i])                           ///若範圍數組中此數未被標爲0,則其未被前面質數篩掉,屬於質數,用它去篩後面的數
        {
            pri[++tot] = i;                   ///(1)將此數存於質數數組            pri[0]裏沒存數字
            for(int j = i + i; j <= 9997; j += i)      ///(2)從其2倍開始篩
            {
                is[j] = 0;
            }
        }
    }
}

int main()
{
    get_prime();
//    for(int i = 1; i <= tot; ++i)
//    {
//        if(2003 == pri[i])
//        {
//        cout << i << '\n';
//        cout << pri[i] << '\n';
//        }
//    }
    int n;
    while(~scanf("%d", &n))
    {
        for(int i = 0; i < n; ++i)
        {
            int a;
            scanf("%d", &a);
            int tem1 = (a - 1) / 6;
            cout << pri[304 + tem1] << '-';
            int tem2 = a % 6;
            switch(tem2)
            {
            case 0:
                cout << "12-21" << '\n';
                break;
            case 1 :
                cout << "01-10" << '\n';
                break;
            case 2 :
                cout << "02-20" << '\n';
                break;
            case 3 :
                cout << "03-30" << '\n';
                break;
            case 4 :
                cout << "10-01" << '\n';
                break;
            case 5 :
                cout << "11-11" << '\n';
                break;
            }
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章