6
题目编号:Exp06-Enhance01,GJBook3-10-05
题目名称:最大元素
题目描述:编写程序,用递归方法求解长度为n的整型数组中最大元素值。
输入:第一行输入一个正整数n(0<n≤100),表示数组的元素个数;第二行依次输入n个整数,作为数组的元素。
输出:最大元素的值。
样例1:
输入:
10
9 8 7 6 5 4 3 2 1 0
输出:
9
样例2:
输入:
10
0 1 2 3 4 5 6 7 8 9
输出:
9
#include<stdio.h>
int s[100];
int max1(int a[],int n){
if(n==0)
return a[0];
if(n>0){
if(a[n]>max1(a,n-1))
return a[n];
else
return max1(a,n-1);
}//第一次编的这个函数计算量太大,遂抛弃
}
int max2(int*p,int n,int r,int i){
if(n==i)
return r;
if(r<*(p+i))
r=*(p+i);
return max2(p,n,r,i+1);
}
int main(void){
int q,i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&s[i]);
q=max2(s,n,s[0],0);
printf("%d",q);
}
题目编号 :Exp06-Enhance03
题目名称:截木条
题目描述:
给定一个长度为n的木条,将其在大致2/5的位置截断,得到2个长度仍为整数的木条;如果新得到的木条的长度仍旧超过规定长度k,将继续按照上述方法处理得到的木条,直到所有木条的长度都不大于k。
编写程序,用递归方法计算一个长度为n的木条,当规定长度为k时,其经过上述截断过程会得到多少根木条。其中:n、k均为正整数,n>10,k>3,且假设木条截断所得短木条长度四舍五入为正整数,长木条长度为总长减去短木条长度。
输入:顺次从键盘输入两个正整数n和k(n>10,k>3)。
输出:木条根数。
样例1:
输入: 20 4
输出: 7
样例2:
输入: 3 20
输出: 1
#include<stdio.h>
#include<math.h>
int s=0;
int wood(float n,int k){
float n1,n2;
if(n<=k)
return 1;
n1=n*2/5;
n1=round(n1);
n2=n-n1;
s=wood(n1,k)+wood(n2,k);
return s;
}
int main(void){
float n;
int k;
scanf("%f%d",&n,&k);
printf("%d",wood(n,k));
}
欢迎大家交流