阶乘
题目地址 Python 练习实例25
题目:求1+2!+3!+…+20!的和。
#include "myhead.h"
long long factorial(int n)
{
if (n == 1)
{
return 1;
}
return factorial(n - 1) * n;
}
int main()
{
long long sum = 0;
for (int i = 1; i <= 20; i++)
{
sum += factorial(i);
}
cout<<sum<<endl;
return 0;
}
程序分析:此程序只是把累加变成了累乘。
代码分析:递归求阶乘,然后累加。
插入数组
题目地址 Python 练习实例39
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#include "myhead.h"
int a[11] = {1,4,6,9,13,16,19,28,40,100};
void insertarray(int n, int index)
{
for (int i = 11; i > index; i--)
{
a[i] = a[i - 1];
}
a[index] = n;
}
int find(int n, int head, int tail)
{
if (tail - head == 1)
{
return tail;
}
int mid = (head + tail + 1) / 2;
if (n == a[mid])
{
return mid;
}
else if (n > a[mid])
{
return find(n, mid, tail);
}
else
{
return find(n, head, mid);
}
}
int main()
{
int n;
cin>>n;
if (n >= a[9])
{
a[10] = n;
}
else if (n <= a[0])
{
insertarray(n, 0);
}
else
{
int index = find(n, 0, 9);
insertarray(n, index);
}
for (int i = 0; i < 11; i++)
{
cout<<a[i]<<" ";
}
return 0;
}
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
代码分析:二分法查找并插入。