TOJ 2776 CD Making

TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html

 

这题其实就是考虑的周全性。。。  贡献了好几次WA, 后来想了半天才知道哪里有遗漏。最大的问题就是, 当零头是13的时候, 不一定前面的光盘都刻录到最大值。比如29,16这种情况, 如果前面的刻录最大值,这样就需要3个盘,而最少的却是 2个就够了,(15,14) 即可;知道这种情况,这题基本就可以了;

注意一下这几个数据:

13 15 输出为2

29 16 输出为2

 

这条题目看起来很容易,但是特殊情况很多。稍微考虑得不全面,就会有情况没有考虑到。


我们按b来分类:

1如果b<=12,那很爽,直接a/b就可以;

2如果b=13,那也很爽,直接把b当成12做就可以;

3如果b=14,如果最后一张CD里放了13首歌,那就只好再来一张;

4如果b>=15,如果最后一张CD里放了13首歌,不需要再来一张CD,从前一张里放一首在最后一张即可;

但是这样就有一个问题,如果只有1张CD,没有前面一张。这种情况下只有加一张CD。

至此,所有的可能性都讨论到了。

 

#include<iostream>
using namespace std;

int main()
{
    int group;
    cin >> group;
    
    while(group > 0)
    {   int a = 0;
        int b = 0;
        int c = 0;
        
        group--;
        
        cin >> a >> b;
        int sum = 0;
        
        if(b == 13)//b==13的情况 
          b = 12;
        sum = a / b;
         c = a % b;
        if(c!=0)
          sum = sum + 1;
        
        if(c == 13&&(b==14||sum==1))//注意此处   
        //if(c==13)//这样不对 
           sum = sum + 1;
        cout << sum << endl;
        
    }
    return 0;
 }

 

posted @ 2016-12-29 15:28  泡面小王子  阅读(272)  评论(1编辑  收藏  举报