1.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多吃了一个。以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一天摘了多少个桃子?(函数递归的应用)
#include<stdio.h>
int number(int day)//本质上是分段函数
{
if(day==10)//第十天对应的桃子是一个
{
return 1;
}
else
{
return(number(day+1)+1)*2;// 其余1~9天遵循如下规律
}
}
int main()
{
int num=number(1);
printf("%d",num);
return 0;
}
//实质
//n=10,An=1
//1<=n<10,Sn=2S(n+1) +2
2
编写一个程序,功能为将一个无序数组b(包含5个元素)中的每个元素插入另一个有序数组a(包含10个元素)中的适当位置,使插入后的数组a依然有序。其中,包含3个子函数,各函数要求如下:
- 子函数1:功能为读入一包含n个元素的数组;
形式为:void input(int a[],int n);
- 子函数2:功能为将一个数值x插入到包含n个元素的有序数组中;
形式为:void insert(int a[],int n,int x);
- 子函数3:功能为输出一包含n个元素的数组;
形式为:void output(int a[],int n);
运行结果示例:
#include<iostream>
#include<stdio.h>
#include<string.h>
int n;
void input(int a[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);//一个个读入数组中的元素
}
void insert(int a[],int n,int x)//插入的套路操作
{
for(int i = 0;i <= n;i++){
if(x<= a[i]){//找到目标位置
for(int j = n;j > i;j--)
{
a[j] = a[j-1];//先最后一个元素开始顺次后移
}
a[i] = x;//把指定元素b进行插入
break;
}
}
}
void output(int a[], int n)
{
for(int i=0;i<n;i++)
printf("%4d",a[i]);//逐个输出
}
int main()
{
int a[100],n=10,k,b[5],i;
printf("输入数组a<10个元素>:");
input(a,10);
printf("输入数组a<5个元素>:");
input(b,5);
for(k=0;k<5;k++)
{
insert(a,n,b[k]);//一次插入一个值,调用一次函数
n++;
}
printf("数组a的排序结果为:");
output(a,n);
printf("\n");
}