2017.1.21【初中部 GDKOI】模拟赛B组 国色天香 题解

本文介绍了一个有趣的火柴数字博弈问题,玩家需要用给定数量的火柴摆出最大或最小的数字,通过贪心策略实现算法并给出具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题:

http://172.16.0.132/senior/#contest/show/1912/2

题目描述:

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

这里写图片描述
这是火柴所形成9个数字的方式,每个数字所需的火柴数量不一样。现在皇上给每个人发了N根火柴,华妃要摆出其所能摆出最小的数,而皇后则需要摆出其所能摆出的最大的数。当然,皇上是不容糊弄的,前导0或者摆出不规则的数字什么的都算是作弊。获胜者的奖励则是皇上今晚会翻她的牌子。现在皇后与华妃都使出浑身解数,而在一旁观看的甄嬛则想尽快知道答案。

输入:

输入包括若干组数据。第一行为一个数字T,表示皇上会进行T次游戏。
接下来一行,每行一个正整数N,表示火柴的数量。

输出:

T行,每组数据包括一行,分别为皇后所能摆出的最优值以及华妃所能摆出的最优值。

样例输入:

1
2

样例输出:

1 1

样例解释:

两根火柴只能摆出数字1,因此华妃和皇后的答案均为1.

分析:

贪心即可;

实现:

var
    n,t,m:longint;
begin
    readln(t);
    while t>0 do 
    begin
        readln(n);
        if n<>1 then
        begin
            m:=n;
            if m mod 2=1 then begin write(7); dec(m,3) end;
            while m>0 do begin write(1);dec(m,2) end;
            write(' ');
            case n mod 7 of 
                1:begin write(10); dec(n,8); end;
                2:begin write(1); dec(n,2) end;
                3:
                begin 
                    if n=3 then begin write(7); dec(n,3) end 
                    else if n=10 then begin write(22); dec(n,10) end
                    else begin write(200); dec(n,17) end; 
                end;
                4:
                begin 
                    if n=4 then begin write(4); dec(n,4) end 
                    else begin write(20); dec(n,11) end; 
                end;
                5:begin write(2); dec(n,5) end;
                6:begin write(6); dec(n,6) end;
            end;
            while n>0 do begin write(8); dec(n,7) end;
        end;
        writeln;
        dec(t);
    end;
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值