poj入门水题整理13

刷题地址:poj.org


1.2056 Tiling

解释:有多少种方法可以用2*1和2*2的瓷砖将2*n的地方贴满

解法:简单点,就是递归啊递归,如果长度少一,只能用2*1的瓷砖竖着贴,如果长度少2,则可以用2*2和2种2*1的方式贴上,但是竖着 2块2*1其实是包含在了T(n-1)的情况中了。

所以公式就是T(n)=T(n-1)+2*T(n-2)


2.3982  序列

解释:给定An = An-1 + An-2 + An-3这个公式,给定A0, A1 和 A2, 计算A99。

解法:你可以直接递归,当然也可以计算出一个公式,A99和A0,A1,A2之间的关系是固定的,直接输入就可以得到值了。


3.1844 Sum

解释:将1到N中的所有数进行加减可以得到一个和S,给定一个S,问:为了得到S最小的N是多少,注意,要把N内所有的自然数都用上。

解法:1)最基础的是1-N的和sum要大于S

            2)其次,1-N的和sum和S的奇偶性要一致,因为无论将哪一个数从+变为-都会少一个偶数,奇偶性不一致的一定不可能。

            3)当sum和S的奇偶性一致之后,这样是不是就可以了呢?当然是可以的,挑选1-N之间的数可以拼凑成任意小于sum的数。所以sum和S之间的差距是可以解决的。


4.3173 Parkside's Triangle

解释:给定一个大小N,开始的数字S,让你输出一个N为边长的三角形,以S开始,然后竖着摆放,摆到9再从1开始,让你输出这个图像。

解法:就是一个N*N的矩阵,下半部分是为空的,上半部分是数字,以下图为例:

3 4 6 9 4
  5 7 1 5
    8 2 6
      3 7
        8
第一行,S=3开始,第二列,s+1,第三列s+1+2,第四列s+1+2+3,

第一行 k=S;for(i=0;i<N-1;i++){k+=i;k%=9;cout<<k<<" "};cout<<k+N-1<<endl;注意格式

第二行,先输出一个空格,第二列,从S+1+1开始,第三列S+1+1+2,第四列(S+2+2+3)%9.

第二行 k=S+1;for(i=0;i<N-1;i++){k+=i;k%=9;cout<<k<<" "};cout<<k+N-1<<endl;注意格式

也就是说每一行的输出代码都一样,每一行的开始的数都是递增的,每一行开始的空格也都是递增的。

再写个大循环套在外面即可。


5.2080 Calendar

解释:如题,日历题。输入从 公立2000年1月1号开始的天数,需要输出年月日以及当天是星期几。

            注意:(年份%400==0)||(年份%4==0 && 年份%100!=0) 的是闰年

解法:星期几非常好确定,直接%7就可以得到对应的结果了。用一个数组存一下对应是周几就好了。

            再用一个数组存一下每个月的月份,减去年份对应的天数,不够时减去月份对应的天数,最后剩下的就是对应的日期数,自己稍微模拟一下就OK了。


6.1008 Maya Calendar

解释:和上题一样,是个日历题,讲的是玛雅文明下用的日历。一种是365天的Haab,前18个月是20天,分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu,月份有名称,但是日子没有名字,是按照0-19来表示的,最后一个月是Haab,因为玛雅人认为这个月不吉利,所以只有5天,分别是0-4。

另一种日历方式Tzolkin是将时间分为13个时间段,每个时间段20天,分别叫:imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau,每天由一对数构成,由这20个名字和13个1-13的数循环组成。(感觉类似我国以前的天干地支),举例就是1 imix, 2 ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat, 9 muluk, 10 ok, 11 chuen, 12 eb, 13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6 canac, 7 ahau, and again in the next period 8 imix, 9 ik, 10 akbal . . . 

两个日历的年份都是从0开始的,所以世界的第一天用2种日历表示就是:

Haab: 0. pop 0
Tzolkin: 1 imix 0

现在要你写个程序,将Haab日历转换为Tzolkin日历。

解法:用两个数组存下名字,参照上题就可以了,然后细心点就可以了。


7.2361 Tic Tac Toe

解释:一个3*3的方阵,X先行放个X,O后行,放O,横着、竖着、斜着连着3子就赢了。给出一个3*3的图形,让你判断是否是这个游戏的其中一种状态。

解法:1)首先O的个数不能比X多,X的个数不能大于O的个数+1

            2)其次不能两者都是赢了的状态,这点很重要。

            3)X赢了的时候,个数要比O的个数多一个,O赢的时候,个数要和X的个数一样。


8.3075 Tic-Tac-Toe

解释:和上题一样,只不过输入将3*3的矩阵变成一行1*9的输入了,也是让你判断是否是这个游戏的状态,输出变为invalid和valid


9.1218 THE DRUNK JAILER

解释:一个监狱官,喝第一杯酒,把所有监狱的门打开,再喝一杯酒把2倍数的门关上,喝第三杯的时候,将3的倍数,如果开着的话就关上,如果关上的话就打开。直到喝到最后一个监狱。之后监狱里的逃犯一旦发现门开着就会越狱,需要知道最多会有多少逃犯会逃跑。

解法:举个例子,6=1*6=2*3,因为6的因子都是成双成对的,所以6的人是逃不掉的,但4=1*4=2*2,2只能被打开一次,所以4是可以逃掉的,由此可见,只有完全平方数是可以逃掉的。只要看n之内的完全平方数的个数即可。


10.1804 Brainman

解释:只通过交换临近的2个数字,使得2 8 0 3变为升序的序列的最少的次数是3次,变为 0 2 3 8

解法:直接一个冒泡算法,一个变量来计数即可。现在想想,其实可以计算逆序数的个数啊,2803,从2开始,小于2的有1个,然后是8,小于8的有2个,0开始,没有小于0的,到3,结束。一共是3次。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值