Q1:
#include<stdio.h>
int main()
{
long long sum=0;
long long a[21]={1};
//scanf("%d",&sum);
printf("前二十项之和为:");
int i;
for(i=2;i<=20;i++)
{
a[i]=a[i-1]+a[i-2];
sum+=a[i];
}
printf("%lld\n", sum);
}
这个数列可能有很多定义,例如从 0 开头从 1 开头均有,可以自己修改。
Q2:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n],t[n],tot=-1;
for (int i=0;i<n;++i) scanf("%d",&a[i]);
for (int i=0;i<n;++i) if(a[i]<0) t[++tot]=a[i];
for (int i=0;i<n;++i) if(a[i]>=0) t[++tot]=a[i];
for (int i=0;i<n;++i) printf("%d ", t[i]);
}
Q3:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n],mx1=0,mx2=0;
for (int i=0;i<n;++i) {
scanf("%d",&a[i]);
if (a[i] >= mx1) {
mx2 = mx1;
mx1 = a[i];
} else if (a[i] >= mx2) {
mx2 = a[i];
}
}
printf("%d %d\n", mx1, mx2);
}
Q4:
#include<stdio.h>
#define max(a,b) (a>b?a:b)
int main()
{
int n;
scanf("%d",&n);
int a[n],ans[n]={},res=0;
for (int i=0;i<n;++i) {
scanf("%d",&a[i]);
if(i)ans[i]=max(ans[i-1]+a[i],a[i]);
else ans[i]=a[i];
res=max(res,ans[i]);
}
printf("%d\n",res);
}
Q5:
你这个问题有点复杂啊,如果可以的话,可以用动态规划(背包问题),还是不行可以考虑用生成函数。
代码我就不放了,有点复杂。 |