Life of xhu

About

HOJ_1631 & HOJ_1637

Jun 17, 2014

  |   #HOJ

好久没刷题了,今天去弄了集中答辩的项目验收,感觉还可以,终于能稍微轻松一下,那就先做两道题吧~

1631:这道题说的就是有一些人进入一个床位有限的旅馆,用一个字符串表示顾客的来和离开,两个相同的字符,前者表示来旅馆,后者表示离开,如果床位始终够,就输出All customers tanned successfully.,否则,输出无床可睡的人数。

这道题我一开始计算入宿过程中最多有多少人,然后发现错了,每一个进来发现床铺满的人,都是无床可睡的人,变量res应该随时更新。

代码如下:

#include <iostream>
#include <string>
using namespace std;

int main(){
    int n, sum, res;
    string str;
    bool flag;
    while(cin >> n && n){
        cin >> str;
        sum = 1;
        res = 0;
        for(int i = 1; i < str.length(); i++){
            flag = false;
            for(int j = 0; j < i; j++){
                if(str[j] == str[i]){
                    flag = true;
                    break;
                }
            }
            if(flag)
                sum--;
            else{
                sum++;
                if(sum > n)
                    res++;
            }
        }
        if(res)
            cout << res << " customer(s) walked away." << endl;
        else
            cout << "All customers tanned successfully." << endl;
    }
}  

1637:这道题就是1/2 + 1/3 + ... + 1/(i+1) >= num这个式子的计算,直接暴力就好了,不知道怎么了我的结果总是比示例输出大2,不过懒得找原因了,在输出里减2就好了。

代码如下:

#include <iostream>
using namespace std;

int main(){
    double num, sum;
    while(cin >> num && num != 0.00){
        sum = 0;
        int i;
        for(i = 2; sum < num; i++)
            sum += 1.0 / (double)i;
        cout << i - 2 << " card(s)" << endl;
    }
}