栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C++.POJ

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++.POJ

描述

你能让一叠卡片悬在桌子上多远?如果您有一张卡,则可以创建卡长度半个的最大悬垂。使用两张卡,您可以使顶部卡悬垂到底部一张卡上,使底部悬垂一张卡长度的三分之一,使表上悬一半,总最大悬伸为1/2 + 1/3 = 5/6卡长度。一般来说,你可以使n张牌悬垂1/2 + 1/3 + 1/4 + ...+ 1/(n + 1) 卡的长度,其中顶部卡将第二张悬垂 1/2,第二张悬于第三张卡上 1/3,第三张悬于第四张卡上 1/4,依此类推,底部卡将表悬垂 1/(n + 1)。

输入

输入由一个或多个测试用例组成,后跟一行,该行包含数字 0.00,表示输入结束。每个测试用例是一行,其中包含一个正浮点数c,其值至少为0.01,最多为5.20;c 将正好包含三位数字。

输出

对于每个测试用例,输出实现至少 c 卡长度悬垂所需的最小卡数。使用示例中所示的确切输出格式。

代码:

#include 

using namespace std;

int main(){


    float m;
	while (cin >> m && m != 0.00F ){
		float sum = 0;
		int j = 1;
		while (true) {
			sum += 1.0/(j + 1);                 		 //得出长度和,进行比较与输出;
			if (sum > m) {
				break;
			}
			++j;
		}
		cout << j << ' ' << "card(s)" << endl;
	}   
}

PS.

在这一题目中,我遇到的第一个问题是循环输入的问题,我第一个想到的是用最熟悉的for循环,如下:

#include 
#include 

using namespace std;

int main(){
	vector length;
	for(int i = 0; ; i++){     // 循环输入数据,直到遇到0.00,并将数据放入length数组中;
		float m;
		cin >> m;
		length.push_back(m);
		if( m == 0 ){
			break;
		}
	}

这里出现了两个问题,第一是明显这串代码不够简洁;第二,我找不到他的问题,但这一串输入结束后不会自动输出。如果之后解决了这个问题我会贴出相关代码。

我第二种方式是从网络上看到的,部分人在用的cin.peek() != ' ',代码如下:

#include 
#include 

using namespace std;

int main(){
	vector length;
	while (cin.peek() != '0'){
		float m;
		cin >> m;
		length.push_back(m);
		} 

这里也存在问题,其一是peek() != ' '中,单引号中的为字符类型,而我的输入中为float类型,和它八字不合,所以这个方法也say no了。

最后就是我最终代码中的内容,这样的代码形式下,在编译器中的输出与输入可能与描述不太相符——它是分别输入和输出的,即输入与输出是一对一对的生成的,遇到0.00时结束程序。

#include 

using namespace std;

int main(){
    float m;
	while (cin >> m && m != 0.00F ){
		       ......
	}    
}

这样的输入与输出方式在POJ中是行得通的,在C++的学习中,cout的方向是“屏幕”,这种“方向”是可以根据需要进行更改的。而在编译器的眼中,我们的输出是在一个类似于“output.txt”的文件中放置,是与我们的输入分开的。

所以这种形式是它所允许的。关于这种形式在考试中的使用,老师提起时是说可以的,不妨一试,反正就算不行的话,把循环改写到外面也不会费很大的事。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号