一、
1.简要题意:
输出m和n范围内的水仙花数,水仙花数是指各位数的立方和等于其本身。
2.解题思路形成:
把一个数的各个位数分离,看各个位数的立方和是否等于其本身,如果相等,则为水仙花数,否则不是水仙花数。用一个变量记水仙花的个数,若为0,则不存在水仙花数,输出no
3.解题细节处理:
百位数=这个数除以100
十位数=这个数取余100再除以10
个位数=这个数取余10
多组数据的输入用while循环
输出的水仙花数之间用空格隔开,注意最后最后一个数之后应没有空格。应用for循环,当为最后一个数时,不用输出空格,否则要输出空格。
4.源代码:
int a,b,c,m,n,t,s,k,j,i;
while(cin>>m>>n)
{
j=0;
for(i=m;i<=n;i++)
{
a=i/100;
b=(i%100)/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
j++;
f[j]=i;
}
}
if(j==0) printf("no\n");
else
{
for(k=1;k<=j;k++)
{
if(k==j)printf("%d\n",f[j]);
else
printf("%d ",f[k]);
}
}
}
return 0;
}
二、
1.简要题意:
求多项式前n项的和
2.解题思路的形成:
求前n项的和,当项数为偶项数时,减去项数的倒数,当为奇数时,加上项数的倒数。
3.解题细节的处理:
定义一个实数型的变量s为它们的和,注意要在循环里面对s赋初值。
如果取余2为0,s=s-1/j;若不为0,s=s+1/j
4.源代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int m,i,j,n;
double s;
cin>>m;
for(i=1;i<=m;i++)
{
cin>>n;
s=0;
for(j=1;j<=n;j++)
{
if(j%2==0) s=s-1.0/j;
else s=s+1.0/j;
}
cout<<fixed<<setprecision(2)<<s<<endl;
}
return 0;
}
三、
1.简要题意:
定义一个从二开始的递增有序偶数数列,按顺序每m个数求一个平均值,不足m个,以实际量求平均值。
2.解题思路的形成:
先定义一个偶数数列,将这个数列分成i组,每组m个,将这m个数想加求平均值,分成i组后,若有剩余,再将剩余的求平均值。
3.解题细节的处理:
定义一个2*(i+1)的偶数列,将这个数列每m个一组进行分组,用累加求和的方法将m个数求和即t=t+a[m*i+j],再取平均,n取余m不等于0,说明有剩余,再对剩余的数求和k=k+a[n-n%m+i],再求平均值
4.源代码:
#include<iostream>
using namespace std;
int main()
{ int m,n,i,j,k=0,t=0;
int a[100];
while(cin>>n>>m)
{for(i=0;i<n;i++)
a[i]=2*(i+1);
for(i=0;i<n/m;i++)
{for(j=0;j<m;j++)
{ t=t+a[m*i+j];
}
cout<<t/m<<" ";
t=0;}
if(n%m!=0)
{
{for(i=0;i<n%m;i++)
k=k+a[n-n%m+i];}
cout<<k/m;
}
}
return 0;
}
四、
1.题意:
有一头母牛每年年初生一头小母牛,小母牛在第四个年头也生一个小母牛,问第n年的时候共有多少头母牛。
2.解题思路的形成:
第一年一头牛,第二年两头,第三年三头,第四年四头,第五年六头……找规律可得第n年的头数等于第n-1年的+第n-3年的
3.解题细节的处理:
f[i]=f[i-1]+f[i-3]
4.源代码:
#include <iostream>
using namespace std;
int main(){
int f[50],i,n;
while(cin>>n&&n!=0)
{
f[1]=1;f[2]=2;f[3]=3;
for(i=4; i<=n;i++)
{
f[i]=f[i-3]+f[i-1];
}
printf("%d\n",f[n]);
}
return 0;
}
五、
1.题意:
有n个数,已经按照从小到大排好顺序,现将另一个数插入该序列中,使新的序列仍然有序。
2.解题思路的形成:
将这个数和最后一个数比较大小,若大于最后一个数,则放在最后一个数之后;若小于最后一个数,这个数放在最后一个数的位置,最后一个数往后移一个位置,依此类推,直到这个数大于前一个数为止。
3.解题细节的处理:
4.源代码:
#include<stdio.h>
int main()
{
int n, m, str[100], i;
while(scanf("%d %d", &n, &m)!=EOF){
if(n<0 || n>100){