1、求斐波那契数列的前20项和
#include<stdio.h>
int main(){
int a[20];
a[0]=a[1]=1;
int sum=0;
for(int i=2;i<20;i++)
{
a[i]=a[i-2]+a[i-1];
sum+=a[i];
//a[0]+a[1]=1+1=2
//a[2]=2
//a[1]+a[2]=3
//...
//a[i-2]+a[i-1]=a[i]
}
printf("%d\n",sum+a[0]+a[1]);
}
2、不用排序,把一个数组中的负数放在数组的前面
#include<stdio.h>
#define N 5
int main()
{
int a[N];
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
//if a[i]<0
//a[i]<-->a[0]
//a[i]<-->a[1]
for( int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(a[i]<0)//如果a[i]<0就交换a[i]-a[j]的值,直到a[i]>0
{
int t;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<N;i++)
{
printf("%d ",a[i]);
}
}
3、不用排序,找到数组元素中的第二大值
#include<stdio.h>
#define N 5
#define MAX(a,b) (a)>(b)?(a):(b)
//不用排序,找到数组元素中的第二大值
int main()
{
int a[N];
int MAX=0,MAX_i,Max=0;
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
//最大值
for(int i=0;i<N;i++)
{
if(MAX<a[i])
{
MAX=a[i];
MAX_i=i;
}
}
a[MAX_i]=0;//最大值赋值为0
//第二大值
for(int i=0;i<N;i++)
{
if(Max<a[i])
{
Max=a[i];
}
}
printf("%d\n",Max);
}
4、连续的子数组之和
#include<stdio.h>
#define N 10
int main()
{
int i,j;
int sum;
int max=0;
int a[N];
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
//a[0]+a[1]
//a[0]+a[1]+a[2]
for(i=0;i<N;i++)
{
sum=0;
for(j=i;j<N;j++)
{
sum=sum+a[j];
if(sum>max)
{
max=sum;
}
}
}
printf("%d\n",max);
}
4、方法二
#include<stdio.h>
#define N 10
int main()
{
sum=0;
for(i=0;i<N;i++)
{
sum+=a[i];
if(sum>max)
{
max=sum;
}
if(sum<0)
{
sum=0;
}
}
printf("max=%d\n",max);
}
5. 数组部分和问题
假设有一个数组 int a[N]; (N <= 20)
能不能从数组a中任选M个元素(0 < M <= N),使得其和为K. M 和 K都是从键盘输入。
#include<stdio.h>标签:--,max,sum,C语言,int,数组,MAX,main From: https://blog.51cto.com/u_15860837/5978768
#define N 10
int main()
{
int a[N];
int k,sum=0,m,j,i;
scanf("%d%d",&k,&m);
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(j=1;j<n;j++)
{
for(i=0;i<n-j;i++)
{
if(a[i]>a[i+1])
{
int t;
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
if(a[i]>k)
{
break;
}
else if()
}
}
}