求菲波拉契数列前20项之和
#include<stdio.h>
int main(int argc, char * argv [ ])
{
int x=0,a,b=1,i,sum=0;
for(i=0;i<20;i++)
{
a=x;
x=x+b;//当前值
b=a; //上一个值
sum+=x;
}
printf("%d\n",sum);
}
/*
不用排序,把一个数组中的负数放到数组的前面
如:
2 4 -3 5 -4 8 -2
==>
-3 -2 -4 2 4 5 8
-2 -3 -4 5 4 2 8
…
*/
#include<stdio.h>
#define N 5
int main(int argc, char * argv [ ])
{
int a[N]={2,4,-3,-5,-4};
int i,j,temp;
printf("初始值为:");
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
for(i=0;i<N;i++)
{
for(j=i;j<N;j++)
{
if(a[j]<0)//如果小于0,就直接和对应的a[i]位互换;
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
break;
}
}
}
printf("\n");
printf("结果值为:");
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
}
/* 求一个一维数组中的第二大元素,不用排序
主要思想:将一维数组a[N]的最大值去掉,剩下的值存到新的数组b[N-1]中去,再继续求最大值。
该最大值就是a[N]数组的第二大值
*/
#include<stdio.h>
int main(int argc, char * argv [ ])
{
int a[5],b[4],i,j,max,max_i;
printf("请输入一个5个数:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
max=a[0];
max_i=0;
for(i=0;i<5;i++)
{
if(a[i]>max)
{
max=a[i];
max_i=i;
}
}
j=max; //将最大值放到最后一位
a[max_i]=a[4];
a[4]=j;
for(i=0;i<4;i++)
{
b[i]=a[i];
}
max=b[0];
max_i=0;
for(i=0;i<4;i++)
{
if(b[i]>max)
{
max=a[i];
max_i=i;
}
}
printf("第二大的值为:%d\n",max);
}
连续的子数组和的最大值
#include<stdio.h>
int main(int argc, char * argv [ ])
{
int a[9],b,c[9],sum=0,max,max1,max2,max3,i,j;
printf("请输入十个数:");
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
for(j=i;j<9-i;j++)
{
b=sum;
sum+=a[j];
if(sum>b)//比较是否比上一个和的值大
{
max=sum;
}
else //不是的话就把前面的最大值先存起来,以免受后面的负数影响
{
max1=b;
}
}
if(max>max1) //将所有可能的最大值存入另一个数组中
{
c[i]=max;
}
else
{
c[i]=max1;
}
}
max3=c[0];
for(i=0;i<9;i++) //找出该新数组中的最大值即所求值
{
if(c[i]>max3)
{
max3=c[i];
}
}
printf("连续的子数组和的最大值为%d\n",max3);
}