Problem 1
题目;an=(-1)^n+1*1/n,求Sn?
分析;注意到n为偶数时系数为-1,于是只需要设置一个系数变量即可。
细节;注意应该设成double型变量
代码;
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
int n,a,i,j,m;
double s;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a;
s=0;
for(j=1;j<=a;j++)
{
m=1;
if(j%2==0)
{
m=-1;
}
s+=m*(1.00/j);
}
printf("%.2lf\n",s);
}
}
Problem 2
题目;对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
分析;首先应该筛选素数,当输入(x,y)后,循环变量i从x开始到y,判断表达式s=i^2+i+41是否为素数。
细节;在判断s是否为素数时,循环的次数不用太多,仅仅需要j<sqrt(s),即可。
注意:标志变量的使用。在没有用标志变量时可能输出很多“sorry”or“ ok”。
代码;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int x,y,i,j,s=0;
int flag=1;
while(cin>>x>>y)
{
flag=1;
if(x==0&&y==0)
break;
else
{
for(i=x;i<=y;i++)
{
s=i*i+i+41;
for(j=2;j<=sqrt(s);j++)
{
if(s%j==0)
{
flag=0;
break;
}
}
}
if(!flag)
cout<<"Sorry"<<endl;
else
cout<<"OK"<<endl;
}
}
}
Problem 3
题目;有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足 m个,则以实际数量求平均值。编程输出该平均值序列。
分析;因为每m个数求一个平均值,当输入n时,首要要求出n/m,既分的组数,然后循环输出平均值。当n不能整除m时要对后面的数求平均值。
细节;首要也要定义标志变量flag,定义一个s来记录一组的和,k来表示数列随着m的变化的变化。
注意;题目要求输出时最后一个数后面没有空格!!
类似题目;水仙花,也是需要用标志变量来控制最后一个数后没有空格
代码;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int m,n,i,j,k,s=0,flag=1;
while(cin>>n>>m)
{
k=0;
flag=1;
for(i=1;i<=n/m;i++)
{
s=0;
for(j=1;j<=m;j++)
{
k+=2;
s+=k;
}
if(flag)
{
cout<<s/m;
flag=0;
}
else
cout<<" "<<s/m;
}
if(n%m)
{
s=0;
for(j=1;j<=n-n/m*m;j++)
{
k=k+2;
s=s+k;
}
cout<<" "<<s/(n-(n/m)*m);
}
cout<<endl;
}
}
Problem 4
题目;有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
分析;已知插入到已排好的序列中,当输入一组数后,需要将
a[n]先存起来,目的是为了在输出最后一个数后面没有空格。
细节;要充分利用algorithm这个头文件下的sort排序函数。
注意;sort函数的范围是 [ )。
代码;
#include <iostream>
#include<algorithm>
using namespace std;
int a[110];
int main()
{
int n,m,i;
while(cin>>n>>m)
{
if(n==0&&m==0)
{
return 0;
}
else
{ &nbs