跪求一道C语言的题答案!!!急急急!!速度速度!!! 10
某图初始状态为一个三角形,此后每一时间步内都以上一时间步内新增加的边为一边再构造一个新的三角形(参见下图),请设计程序计算如此经历20步(T=20),此时图中有多少条边,...
某图初始状态为一个三角形,此后每一时间步内都以上一时间步内新增加的边为一边再构造一个新的三角形(参见下图),请设计程序计算如此经历20步(T=20),此时图中有多少条边,多少个点。
展开
3个回答
展开全部
看来楼主问了2遍,所以我也就再回答一遍了。
楼主不要被题目给唬住了,其实这是一个简单的循环问题。关键是找到其中的算法。其实很简单,要一条边一条边来看:以三角形的一个边再构造一个三角形,显然已经具备了2个点和一个边,再增加一个点和2条边就是一个新的三角形。所以有:
1)初始条件:一个三角形,因此有3个点,3条边。然后根据边数来计算就可以了
2)循环第一次,3条边等于新增3个点,新增6条边。
3)循环第二次,新增的6条边,等于新增6个点,新增12条边。
4)循环第三次,新增的12条边,等于新增12个点,新增24条边。
这样循环计算20次就可以了,通过2个变量将点数和边数累计就行了。楼主这个不难吧!
楼主不要被题目给唬住了,其实这是一个简单的循环问题。关键是找到其中的算法。其实很简单,要一条边一条边来看:以三角形的一个边再构造一个三角形,显然已经具备了2个点和一个边,再增加一个点和2条边就是一个新的三角形。所以有:
1)初始条件:一个三角形,因此有3个点,3条边。然后根据边数来计算就可以了
2)循环第一次,3条边等于新增3个点,新增6条边。
3)循环第二次,新增的6条边,等于新增6个点,新增12条边。
4)循环第三次,新增的12条边,等于新增12个点,新增24条边。
这样循环计算20次就可以了,通过2个变量将点数和边数累计就行了。楼主这个不难吧!
更多追问追答
追问
能帮我用C语言编出来么亲- -
追答
我试试,C也好久不用了,仿照侬上面的写法。
#include
#include
void main()
{ int i; /*循环次数*/
int b; /*每次新增的边数*/
int tp,tb; /*累计的点数和变数*/
tp=3; /*最初一个三角形,有三个点*/
tb=3; /*最初一个三角形,有三条边*/
b=3; /*当开始时,只有一个三角形,所以初始条件新增的边数为3*/
for (i=1;i<20;i++){ /*这个还要解释吗*/
tp=tp+b; /*每次循环,增加的点数与上一次循环新增的变数相等,累加*/
tb=tb+2*b; /*每次循环,增加的边数是上一次循环新增边数的2倍,累加*/
b=2*b; /*没次循环,新增的边数等于上一次循环新增边数的2倍,用于下一次循环计算点数和边数*/
}
printf("Point=%d; Line=%d\n",tp,tb); /*这个还要解释吗*/
}
楼主你看,确实不难吧!
展开全部
很明显,只有第N步中新增的边,才能在第N+1步作为新三角形的基础边。
第一步:以最初始的3条边为基础边,新增3个三角形,新增3个点6边条;
第二步,以上一步新增的6条边为基础边,新增6个三角形,新增6个点12边条。
。。。。
第N步,以上一步新增的3*2^(N-1)条边为基础边,新增3*2^(N-1)个三角形,新增3*2^(N-1)个点和3*2^N条边。
。。。。。
#include "stdio.h"
void main()
{
long s1,s2;;
long t=3;
s1=s2=3;
for(int i=1;i<=20;i++)
{
s1+=t;
s2+=2*t;
t*=2;
}
printf("%ld,%ld\n",s1,s2);
}
第一步:以最初始的3条边为基础边,新增3个三角形,新增3个点6边条;
第二步,以上一步新增的6条边为基础边,新增6个三角形,新增6个点12边条。
。。。。
第N步,以上一步新增的3*2^(N-1)条边为基础边,新增3*2^(N-1)个三角形,新增3*2^(N-1)个点和3*2^N条边。
。。。。。
#include "stdio.h"
void main()
{
long s1,s2;;
long t=3;
s1=s2=3;
for(int i=1;i<=20;i++)
{
s1+=t;
s2+=2*t;
t*=2;
}
printf("%ld,%ld\n",s1,s2);
}
更多追问追答
追问
做不出来呀这个程序- -?
追答
怎么做不出来,我都出结果了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
0 3 9 21 45 93 189 381 765 1533 3069 6141 12285 24573 49149 98301 196605 393213
786429 1572861 3145725 6291453
#include<stdio.h>
int main()
{
int a[22];
int i;
a[0]=0;
a[1]=3;
a[2]=9;
for(i=3;i<22;i++)
{
a[i]=(a[i-1]-a[i-2])*2+a[i-1];
}
for(i=0;i<22;i++)
printf("%d ",a[i]);
}
786429 1572861 3145725 6291453
#include<stdio.h>
int main()
{
int a[22];
int i;
a[0]=0;
a[1]=3;
a[2]=9;
for(i=3;i<22;i++)
{
a[i]=(a[i-1]-a[i-2])*2+a[i-1];
}
for(i=0;i<22;i++)
printf("%d ",a[i]);
}
更多追问追答
追问
这个做不出来饿。。。嗷嗷嗷~大神!!!
追答
我输出到21了,第20步的话,答案应该是3145725
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询