1.问题描述
1.一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢?
2.中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。 它的前几项是:0、2、4、8、12、18、24、32、40、50 … 其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。 以下的代码打印出了大衍数列的前 100 项。
2.问题分析
切面条
1、不对折(对折零次),从中间切一刀,得到 2 根面条, 2 = 2
2、对折一次,从中间切一刀,得到 3 根面条, 3 = 2 + 2^0
3、对折两次,从中间切一刀,得到 5 根面条, 5 = 2 + 2^0 + 2^1
4、对折三次,从中间切一刀,得到 9 根面条, 9 = 2 + 2^0 + 2^1 + 2^2
…
11、对折十次,从中间切一刀,得到 2 + 2^0 + 2^1 + 2^2 + ...... + 2^9
根面条
大衍数列
它的前几项是:0、2、4、8、12、18、24、32、40、50 …
其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。
3.代码编写
切面条
1.分析对折次数和结果之间的规律
2.对折0次时,for循环不走
3.用 i 控制对折之后,2的幂次
```c
#include <stdio.h>
int cut_noodles(int times){
int result=2,t=1;
for(int i=0;i<times;i++){
result+=t;
t=t*2;
}
return result;
}
int main(){
int result;
int times=10;
result = cut_noodles(times);
printf("对折%d次从中间切一刀得到的面条数是:%d\n",times,result);
return 0;
}
开始运行...
对折10次从中间切一刀得到的面条数是:1025
大衍数列
#include <stdio.h>
int main()
{
int i;
for (i = 1; i <= 100; i++)
{
if (i%2==0)
printf("%d ", i * i / 2);
else
printf("%d ", (i * i - 1) / 2);
}
printf("\n");
}
开始运行...
0 2 4 8 12 18 24 32 40 50 60 72 84 98 112 128 144 162 180 200 220 242 264 288 312 338 364 392 420 450 480 512 544 578 612 648 684 722 760 800 840 882 924 968 1012 1058 1104 1152 1200 1250 1300 1352 1404 1458 1512 1568 1624 1682 1740 1800 1860 1922 1984 2048 2112 2178 2244 2312 2380 2450 2520 2592 2664 2738 2812 2888 2964 3042 3120 3200 3280 3362 3444 3528 3612 3698 3784 3872 3960 4050 4140 4232 4324 4418 4512 4608 4704 4802 4900 5000
4.总结
总结:今天突然决定看一些简单的算法题,希望能坚持下去,今天不努力,明天当垃圾,nky你可长点心吧!