【衡阳八中noip模拟题】国色天香

庭前芍药妖无格,池上芙蕖净少情。唯有牡丹真国色,花开时节动京城。
——唐·刘禹锡《赏牡丹》
芍药花再红终究妖艳无格。终不及牡丹,国色天香。
——乌拉那拉氏宜修
华妃总是想要用自己的气焰打压皇后,正好有一天,皇上有兴趣来玩一个火柴
游戏,让华妃和皇后都来参与。规则如下:

这是火柴所形成9 个数字的方式,每个数字所需的火柴数量不一样。现在皇上
给每个人发了N 根火柴,华妃要摆出其所能摆出最小的数,而皇后则需要摆出其
所能摆出的最大的数。当然,皇上是不容糊弄的,前导0 或者摆出不规则的数字
什么的都算是作弊。获胜者的奖励则是皇上今晚会翻她的牌子。现在皇后与华妃
都使出浑身解数,而在一旁观看的甄嬛则想尽快知道答案。
[输入格式] (match.in)
输入包括若干组数据。第一行为一个数字T,表示皇上会进行T 次游戏。
接下来一行,每行一个正整数N,表示火柴的数量。
[输出格式] (match.out)
T 行,每组数据包括一行,分别为皇后所能摆出的最优值以及华妃所能摆出
的最优值。
[样例输入] 

1 2

[样例输出]
1 1 

[样例解释]
两根火柴只能摆出数字1,因此华妃和皇后的答案均为1.
[数据范围与约定]
对于K%的数据:N<=K (K=10,20,...,100)
对于100%的数据:2<=N<=100

简单模拟,没什么好说的,放代码吧(╯‵□′)╯︵┻━┻

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n;
int maxn=0,minn=0;
int a[101],b[101];
int num[8];
void work2(int n,int i)
{
    num[7]=8;
    num[6]=0;
    num[5]=2;
    num[4]=4;
    num[3]=7;
    num[2]=1;
    if(n<=7)
    {
        minn=num[n];
        b[i]=minn;
        return;
    }
    if(n>7)
    {
        n=n-2;
        minn=1;
        while(n>=6)
        {
            n=n-6;
            minn=minn*10;
        }
        if(n>=2)minn=minn*10+num[n];
    }
    b[i]=minn;
}
void work1(int i)
{
    scanf("%d",&n);
    int key=n;
    int k=1;
    while(n>=2)
    {
        n=n-2;
        maxn=1*k+maxn;
        k=k*10;
    }
    if(n==1) maxn+=6*(k/10);
    a[i]=maxn;
    work2(key,i);
}
int main()
{
    scanf("%d",&t);
    for(int i=1;i<=t;i++) work1(i);
    for(int i=1;i<=t;i++) printf("%d %d\n",a[i],b[i]);
    return 0;
}

 

posted @ 2015-10-25 12:09  Oranges  阅读(425)  评论(0编辑  收藏  举报