码迷,mamicode.com
首页 > 其他好文 > 详细

uva11401

时间:2018-12-03 21:10:07      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:cstring   不同的   pre   mes   view   span   利用   algorithm   个数   

题意如下:输入n,输出有多少种方法可以从1,2,3,,n中选出3个不同的整数,使得以他们为三边长可以组成三角形。1n≤10^6

一个很简单的想法是递推,首先想想给你一个数n,那么肯定假设前n-1个已经解出,要你求第n个的可以组成的三角形数量,首先可以肯定它最大的一条边已经确定,然后便可以利用枚举第二条边来确定第3条边的可能取值。

对于单条边,我推了一下公式,发现错了,接下来是刘汝佳书上的代码:

技术分享图片
 1 #include <cstring>
 2 #include <cmath>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <cstdio>
 6 using namespace std;
 7 typedef unsigned long long ll;
 8 const int maxn=1000100;
 9 long long f[maxn];
10 int n;
11 int main(){
12     f[3]=0;
13     for(long long i=4;i<=1000000;i++)  f[i]=f[i-1]+((i-1)*(i-2)/2-(i-1)/2)/2;  //要注意long long 和int的区别,如果用int i的话会爆炸,得强制转换
14     //还有不能把式子合并,合并后由于有几个除2,这样会把答案弄错,因为你想得到的是整数而不是小数
15     while(scanf("%d",&n)!=EOF){
16         if(n<3) break;//注意题目条件
17         printf("%lld\n",f[n]);
18     }
19     return 0;
20 }
View Code

挂一个大佬的博客:http://www.cnblogs.com/autoint/p/10025671.html

 

 

 

uva11401

标签:cstring   不同的   pre   mes   view   span   利用   algorithm   个数   

原文地址:https://www.cnblogs.com/pandaking/p/10060724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!