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