hdu 4486

给你一个长度,求以这个长度为周长的整数三角形个数为多少,如果非等腰则个数加一

分类,等腰与非等腰,水题一个,就是边界处理需要注意

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 int big(int a, int b)///return x bigger than a * 1.0 / b
 5 {
 6     return a / b + 1;
 7 }
 8 int small(int a, int b)///return x smaller than a * 1.0 / b
 9 {
10     if(a % b == 0) return a / b - 1;
11     else return a / b;
12 }
13 int hasone(int n)
14 {
15     int num = 0;
16     for(int i = big(n, 3); i <= small(n, 2); i++)
17     {
18         num += small(n-i, 2) - big(n-2*i, 1) + 1;
19     }
20 
21     return num*2;
22 }
23 int hastwo(int n)
24 {
25     return small(n, 2) - big(n, 4) + 1;
26 }
27 int solve(int x)
28 {
29     return hastwo(x) + hasone(x);
30 }
31 
32 int main()
33 {
34     int n;
35     cin >> n;
36     while(n--)
37     {
38         int a, b;
39         cin >> a >> b;
40         cout << a << " " << solve(b) << endl;
41     }
42     return 0;
43 }

关于这一题需要说的有两点:

1.英文读题能力,旁边有着一本字典也无法读出这道题的意思,哪怕用了谷歌翻译也不知道意思,最后还是看的博客才知道他在讲什么。

2.边界处理,在看别人的代码时候发现有一个细节用的非常好

for(int i = (m+2)/3; i < (m+1) / 2; i++),这就是我的big和small函数。

print “ 欢迎来到渣小狼的博客,这既是博客,也是日记,里面记录了小狼的学习经历还有一些小狼的见解,非常希望每一个来到这里的人能够留下只言片语,更加的希望留下的是对于小狼的不足的补充,谢谢(*^__^*) 嘻嘻……”
原文地址:https://www.cnblogs.com/wolf-yasen/p/6735794.html