切面条
一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。如果连续对折2次,中间切一刀,可以得到5根面条。那么,连续对折10次,中间切一刀,会得到多少面条呢?
对折次数n 面条根数f(n)
0 1
1 3
2 5
f(n)=f(n-1)+2^(n-1),n=2,3,...
f(n)=1,n=1
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int fun(int x)
{
int i;
int s=1;
if(x == 1)
return 3;
else{
for(i=1;i<x;i++)
{
s=2*s;
}
return (s + fun(x-1));
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return 0;
}
李白打酒
话说大诗人李白,一生好饮。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)
#include <iostream>
#include <cstdio>
using namespace std;
int sum=0;
char str[100];
/*jiu:酒量
count:遇到店和花总次数
count_hua:遇到花次数
count_dian: 遇到店次数
遇到店和花递归搜索
fun(jiu-1,count+1,count_hua+1,count_dian);
fun(jiu*2,count+1,count_hua,count_dian+1);
*/
int fun(int jiu, int count,int count_hua, int count_dian)
{
int i;
if(jiu <0 || (jiu == 0 && count < 15)|| count >15)
return 0;
if(jiu==0 && count ==15 && count_hua==10 && count_dian==5)
{
sum++;
for(i=0;i<15;i++)
{
putchar(str[i]);
}
cout<<endl;
}
str[count]='a';
fun(jiu-1,count+1,count_hua+1,count_dian);
str[count]='b';
fun(jiu*2,count+1,count_hua,count_dian+1);
}
int main()
{
fun(2,0,0,0);
cout<<"sum:"<<sum<<endl;
return 0;
}
史丰收速算
史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法。 其中,乘以7是最复杂的,就以它为例。因为,1/7 是个循环小数:0.142857…,如果多位数超过 142857…,就要进1。同理,2/7, 3/7, … 6/7 也都是类似的循环小数,多位数超过 n/7,就要进n
下面的程序模拟了史丰收速算法中乘以7的运算过程。 乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。乘以 7 的进位规律是: 满 142857… 进1, 满 285714… 进2, 满 428571… 进3, 满 571428… 进4, 满 714285… 进5, 满 85714