1、描述
小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?
输入描述:
输入包含一个整数n (1 ≤ n ≤ 30)
输出描述:
输出一个整数,即小乐乐可以走的方法数。
n>2
假设有10个台阶,第一次走1个,还剩9个。第一次如果走2个,就还剩8个 。
那这9个台阶有多少种走法呢?
比如说,这封装了一个函数叫fib(n),表达意思是,计算走n个台阶,有多少种走法。
那剩下的9个台阶,就有fib(9)种走法。
如果第一次走2个,还剩8个,那这个8个台阶走法就有fib(8)种走法。
那小乐乐走上这10个台阶有多少走法呢 fib(10)=fib(9)+fib(8)
就是把第一次走1步和第一次走两步的走法加起来就是走10个台阶的走法。
就是斐波那契数列的问题
#include <stdio.h>
int fib(int n)
{
if(n<=2)
{
return n;
}
else
{
return fib(n-1)+fib(n-2);
}
}
int main() {
int n=0;//输入
scanf("%d",&n);
//计算
int m=fib(n);
//输出
printf("%d\n",m);
return 0;
}
2、描述
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
数据范围:序列长度和序列中的值都满足 1≤�≤501≤n≤50
输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个整数,输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出描述:
输出为一行,删除指定数字之后的序列。
#include <stdio.h>
int main() {
int n=0;
scanf("%d",&n);
int arr[50];
//接收n个数字
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int del=0;//要删除的值
scanf("%d",&del);//接收要删除的值
//1 3 2 4 2 5 6
//删2
int j=0;//j作为下标锁定的位置就是用来存放不删除的数据的
for(i=0;i<n;i++)
{
if(arr[i]!=del)
{
arr[j++]=arr[i];
}
}
//输出
for(i=0;i<j;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
3、描述
输入n个成绩,换行输出n个成绩中最高分数和最低分数的差。
输入描述:
两行,第一行为n,表示n个成绩,不会大于10000。
第二行为n个成绩(整数表示,范围0~100),以空格隔开。
输出描述:
一行,输出n个成绩中最高分数和最低分数的差。
#include <stdio.h>
int main() {
int n=0;
scanf("%d",&n);
int i=0;
int arr[10000];
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
//找出最大值
int max=arr[0];
for(i=0;i<n;i++)
{
if(arr[i]>max)
max=arr[i];
}
//找出最小值
int min=arr[0];
for(i=0;i<n;i++)
{
if(arr[i]<min)
min=arr[i];
}
printf("%d\n",max-min);
return 0;
}
简化版:
#include <stdio.h>
int main() {
int n=0;
scanf("%d",&n);
int i=0;
int arr[10000];
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int max=arr[0];
int min=arr[0];
for(i=0;i<n;i++)
{
if(arr[i]>max)
max=arr[i];
if(arr[i]<min)
min=arr[i];
}
printf("%d\n",max-min);
return 0;
}
再简化版:
#include <stdio.h>
int main() {
int n=0;
scanf("%d",&n);
int i=0;
int arr[10000];
int max=0;
int min=100;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
if(arr[i]>max)
max=arr[i];
if(arr[i]<min)
min=arr[i];
}
printf("%d\n",max-min);
return 0;
}