蒜头君任务系统C语言,白菜君的三角形 T3180 计蒜客

信息学入门赛#18

写一下这个题。

题目链接

白菜君也加入到这个游戏当中来了,现在规则发生了一些改变。目前有一个长度为 n 的木棍,当做直角三角形的斜边。蒜头君、花椰妹、白菜君要从许多整数长度的木棍中选出三根,分别长为 a,b,c。现在,蒜头君和花椰妹的木棍组成一条直角边 a+b,白菜君组成另外一条直角边 c,并且要求 a+b≤c。请问一共可以有多少种取木棍的方案。提示:a=3,b=4与 a=4,b=3算作同一种方案。

输入格式

输入为一行,是一个整数 n,1≤n≤106

输出格式

输出为一行,是一个整数,为取木棍的方案数。

样例输入1

5

样例输出1

1

样例输入2

26

样例输出2

5

写题的时候首先要注意声明要使用long long,并且格式说明符是%lld,这个一定要注意,太容易忘了。

其实,我觉得写题过程会使用floor函数也很重要。floor函数原型为double floor(double a),返回小于a的最大整数。

如果当时想不到用floor函数的话,用sqrt函数也可以,判断的话就是判断sqrt(a)*sqrt(a)==a.

在三边长度确定后,这组数据的方案数就是(a+b)/2。

原因?

你猜

代码如下:

#include

#include

int main()

{

long long n;

scanf("%lld",&n);//看清楚格式说明符

long long i;

int ans=0;

double ex;

for(i=1;i

{

ex=sqrt(n*n-i*i);//ex其实就是我们想找的c

if(ex==floor(ex))//如果ex是我们想找的c

{

if(ex>=i)//要保证c>=a+b

ans+=i/2;

}

}

printf("%d\n",ans);

return 0;

}

还有一个不用floor的版本

#include

#include

int main()

{

long long n,i,j,k;

int ans=0;

scanf("%lld",&n);

long long xixi;

for(i=1;i

{

k=n*n-i*i;

xixi=sqrt(n*n-i*i);

if(k==xixi*xixi)

{

if(xixi>=i)

{

ans+=i/2;

}

}

}

printf("%d\n",ans);

return 0;

}

对了,上面的代码看着很像是c语言。但是提交的时候一定要设置成c++提交才能通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值