小L的长方形

题源:http://acm.zzuli.edu.cn/problem.php?cid=1398&pid=8时间限制:1 Sec内存限制:128 MB题目描述在数学课上,老师发给小L一根铁丝,让小L将这根铁丝围成一个长方形。要求这个长方形的长是宽的3倍,并且计算它的面积。输入仅一个整数a,表示铁丝的长度(a≤10000)。输出输出三个数,分别表示长方形的长...
摘要由CSDN通过智能技术生成

题源:http://acm.zzuli.edu.cn/problem.php?cid=1398&pid=8

时间限制: 1 Sec  内存限制: 128 MB

题目描述

在数学课上,老师发给小L一根铁丝,让小L将这根铁丝围成一个长方形。要求这个长方形的长是宽的3倍,并且计算它的面积。

输入

仅一个整数a,表示铁丝的长度(a≤10000)。

输出

输出三个数,分别表示长方形的长、宽、面积。如果计算结果是整数,则输出整数结果(没有小数部分);如果不是,则保留三位小数。每个数之间用一个空格隔开。

样例输入 Copy

36

样例输出 Copy

13.500 4.500 60.750

前言:这道题很明显的签到题了。但是我当时却用来半个多小时还没做出来,原因是对知识点理解地还不够透彻,没有用一种清晰的思路去分析叭。

题解:

考点:强制类型转换

解题思路:首先,你能够很明确地知道判断要输出的数是小数还是整数的关键是n%8是否等于0,写好好这个条件之后,先选择简单的,如果n%8等于0,那么就输出整数形式,直接输出就行。接下来就是比较难的小数输出了,首先,你不能选择直接输出%.3f,因为n/8是两个整数相除,只会得到整数,你得到的肯定是x.000的形式,所以,你就需要用到强制类型转换了,想办法把n/8中n或者8中的任意一个变成小数(你当然也你能把它们都变成float型),这样得到的就是float类型的。(因为根据自动类型转换规则,当/号两边是int型和float型时,结果自动转换成float类型)

解法一:

预先把n转换成float

#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
//  freopen("input.txt","r",stdin); 
    //别忘注释 
    int n;
    cin>>n;
    if(n%8==0)
    {
    	int a=n/8*3;
    	int b=n/8;
    	cout<<a<<" "<<b<<" "<<a*b;
	}
	else
	{
		float m=n/1.0;//用m来间接使n成为一个浮点数,千万别傻乎乎地写上float n=n*1.0,神知道--
		float a=m/8*3;//你为啥之前定义了一个int n,现在又定义了一个float n
    	float b=m/8;
    	printf("%.3f %.3f %.3f",a,b,a*b);
	}
     
    return 0;
}

解法二:

在表达式中将n变成浮点数类型,让n乘或除以1.0就可以了

#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
//  freopen("input.txt","r",stdin); 
    //别忘注释 
    int n;
    cin>>n;
    if(n%8==0)
    {
    	int a=n/8*3;
    	int b=n/8;
    	cout<<a<<" "<<b<<" "<<a*b;
	}
	else
	{
		float a=n*(1.0)/8*3;
    	float b=n*(1.0)/8;
    	printf("%.3f %.3f %.3f",a,b,a*b);
	}
     
    return 0;
}

解法三:

在表达式中将8变成浮点数8.0

#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
//  freopen("input.txt","r",stdin); 
    //别忘注释 
    int n;
    cin>>n;
    if(n%8==0)
    {
    	int a=n/8*3;
    	int b=n/8;
    	cout<<a<<" "<<b<<" "<<a*b;
	}
	else
	{
		float a=n/8.0*3;
    	float b=n/8.0;
    	printf("%.3f %.3f %.3f",a,b,a*b);
	}
     
    return 0;
}

解法四:

利用标准的强制转换将n转换成浮点数

#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
//  freopen("input.txt","r",stdin); 
    //别忘注释 
    int n;
    cin>>n;
    if(n%8==0)
    {
    	int a=n/8*3;
    	int b=n/8;
    	cout<<a<<" "<<b<<" "<<a*b;
	}
	else         //强制转换n成浮点数,也就是在表达式中n前面加(float)。
	{
		float a=(float)n/8*3;  
    	float b=(float)n/8;
    	printf("%.3f %.3f %.3f",a,b,a*b);
	}
     
    return 0;
}

附加知识点:用强制转换把float类型转化成int类型时,都会进行四舍五入,谨慎使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值