编程——数三角形

emmajiang 2004-04-25 03:32:04
其实题目很是简单:
一个等边三角形,如果在其每条边上平分N个点,问可以数出几个三角形,例如每条边上有一个点则可以有5个三角形。大家可要仔细数哟,大家来试试看怎么样编程吧
不过要考虑时间复杂度的问题,N<=500,输入一个N后要在1秒中内得出答案。
快来试试哟
Sample Input
1
2
3
Sample output
5
13
27
...全文
87 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
languagec 2004-04-26
  • 打赏
  • 举报
回复
假如原先边为n-1,则再加长一个单位时为 n.这时,单位为1的三角形多了 2*n-1 个,单位为2的多了 n-2+1 个,同理单位为3,4……的多了 n-3+1,n-4+1…… 个。直到n-n+1。

就是一个递归过程,不过用递归会益处吧。

#include <iostream.h>
long Sum(long num)
{
long n,sum=0;
n=2;
while(num-n>=0)
{
sum=sum+num-n+1;
n++;
}
//cout<<"Sum="<<sum<<endl;
return sum;
}

int main()
{
long n,sum,s;
while(cin>>n)
{
for(s=1,sum=0;s<=n;s++)
{
sum=sum+2*s-1+Sum(s);
}
cout<<sum<<endl;
}
return 0;
}


我根据思路写了一个,不过提交未过 :(
RPhx 2004-04-26
  • 打赏
  • 举报
回复
自己画图推导一下就可以了,不难的
jiziba 2004-04-26
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) //argv[1]-原文件,argv[2]-目标文件
{
if(argc!=3)
{
cout<<"Usage:ExeFile SourceFile DestinationFile"<<endl;
return 0;
}

ifstream iFile;
ofstream oFile;
char Data[8];
long SideLen;
long TriNum;

iFile.open(argv[1]);
oFile.open(argv[2]);

while(iFile.getline(Data,8))
{
sscanf(Data,"%d",&SideLen);
if(SideLen == 1) TriNum = 1;
else TriNum = SideLen*SideLen+3*SideLen-5;
oFile<<TriNum<<endl;
}//while

iFile.close();
oFile.close();
}//main
whalefish2001 2004-04-26
  • 打赏
  • 举报
回复

#include <iostream.h>
#include<conio.h>

//using namespace std;

int main()
{

int i,num[2048];
//因为到2048溢出。
num[0]=0;
num[1]=1;
num[2]=5;
for(i=3;i<2048;i++)
{
if((i-long(i/10)*10)%2==1)
num[i]=3*num[i-1]-3*num[i-2]+num[i-3]+1;
else
num[i]=3*num[i-1]-3*num[i-2]+num[i-3]+2;
if (i%10 == 3)getch();
cout<<i<<" : "<<num[i]<<endl;
}
/*
int n;

while(cin>>n)
{
cout<<num[n+1]<<endl;
}
*/

return 0;
}

languagec 2004-04-26
  • 打赏
  • 举报
回复
漏了几种情况

改好了

sum=sum+(num-n)+n/2;
emmajiang 2004-04-25
  • 打赏
  • 举报
回复
那你们是怎么推导出来的呀,能说一下嘛
ync111 2004-04-25
  • 打赏
  • 举报
回复
这到题我也做了
本人也在作浙江大学上的题 以作了几十题
但没到题都要发送好多编才能对
有那位大哥大姐愿意和我一起做的; 以求共同发展;
请记下我的QQ:284301276或272656303
我的邮箱:ync999@163.com
zhp831221 2004-04-25
  • 打赏
  • 举报
回复
这里有浙江大学的吗?怎么知道http://acm.zju.edu.cn/show_problem.php?pid=1629
languagec 2004-04-25
  • 打赏
  • 举报
回复
http://acm.zju.edu.cn/show_problem.php?pid=1629
是这个题吧
freefalcon 2004-04-25
  • 打赏
  • 举报
回复
ft,谁出的题,500刚好溢出,将楼上的改为


#include <cstdio>
using namespace std;

int main()
{
int i;
__int64 num[501];
num[0]=0;
num[1]=1;
num[2]=5;
for(i=3;i<501;i++)
{
if(0!=i%2)
num[i]=3*num[i-1]-3*num[i-2]+num[i-3]+1;
else
num[i]=3*num[i-1]-3*num[i-2]+num[i-3]+2;
}
int n;
while(cin>>n)
{
printf("%I64d\n", num[n+1]);
}
return 0;
}
RPhx 2004-04-25
  • 打赏
  • 举报
回复
用递推的方法很容易算出来的.
#include <iostream>
using namespace std;

int main()
{
int i,num[501];
num[0]=0;
num[1]=1;
num[2]=5;
for(i=3;i<501;i++)
{
if(0!=i%2)
num[i]=3*num[i-1]-3*num[i-2]+num[i-3]+1;
else
num[i]=3*num[i-1]-3*num[i-2]+num[i-3]+2;
}
int n;
while(cin>>n)
{
cout<<num[n+1]<<endl;
}
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧