1.题意:将一个百分制的成绩转化为等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
输入数据不在0~100范围内,输出:“Score is error!”。
思维过程:这是第一套题的第一个题,并不是特别难,但是因为第一次用这个系统,所以在做题过程中出现了一些小波折。首先,题目大意很简单,就是一个判断和循环,第一个问题是一开始没有注意多组输入,多组输入需要用while循环;其次,在输出时输出的字母后面不能加空格,而且需要用endl换行。
源代码:
#include <iostream>
using namespace std;
int main(){
int t;
while(cin>>t)
{if(t>=90&&t<=100)
cout<<"A"<<endl;
else if(t>=80&&t<90)
cout<<"B"<<endl;
else if(t>=70&&t<80)
cout<<"C"<<endl;
else if(t>=60&&t<70)
cout<<"D"<<endl;
else if(t>=0&&t<60)
cout<<"E"<<endl;
else
cout<<"Score is error!"<<endl;}
return 0;
}
2.题意:在(X,Y)区间内,判断表达式N^2+N+41是否都为素数。
思维过程:首先,用一个for循环将表达式的值存到数组中然后统一判断是否为素数或者求一个判断一个,还有就是用if语句当X,Y都为0时输入结束,关键问题就是素数的判断,输出时要换行。这道题加深了我对素数判断的认识,即用一个for循环将数值从2开始取余,取到数值的1/2为止,如果余数始终不为0,则该数值为素数。
源代码:
#include <iostream>
using namespace std;
int main()
{
int i,n,m,j,o,x,y;
int a[1000];
while(cin>>x>>y)
{
m=0;o=0;
if(x==0&&y==0)
break;
else
for(i=x;i<=y;i++)
{
n=i*i+i+41;
for(j=2;j<=n/2;j++)
{
if(n%j==0)
m++;
}
if(m!=0)
cout<<"Sorry"<<endl;
else
o++;
}
if(o==y-x+1)
{cout<<"OK";
cout<<endl;}
}
}
3.题意:求多项式1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...前n项的和,输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。
思维过程:题意不难理解,先用一个for循环输入,然后判断第一个数是奇数还是偶数,然后分别将奇数项,偶数项加起来求和,用奇数项和减去偶数项和,最后输出一个两位小数,注意尽量不要cin和printf的混用,如果是c++程序的话#include <iomanip>为头文件名,cout<<setiosflags(ios::fixed)<<setprecision(2);如果是c的话就用printf(”%.2f”,n)表示,最后注意换行。
源代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
int a[1000];
int main()
{
int j,n,i;
double c,b;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=a[i];j++)
{
c=double(1.000000/j);
b=b+pow(-1,j-1)*c;
}
printf("%.2lf",b);
cout<<endl;
b=0;
}
}
4.题意:有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
思维过程:首先需要将那个从2开始的偶数列想清楚,然后将他们m个数一划分m个数一划分,最后如果不够m个就输出剩下数的平均值,期间先判断n能不能被m整除,然后分情况讨论,再将偶数列分割成题目要求的小块,求平均值。注意,再输出的时候,输出的最后一个数据后面不能有空格,否则过不了,处理方法大体上有两种一种是用if判断啥时候输出最后一个,然后最后一个数据不输出空格,还有一种是先输出第一个数据,然后在输出空格+数据的形式,我跟偏向于后面的一种。
源代码:
#include<stdio.h>
int main()
{
int m,n,i,line[104],s,j,h;
int aver1,aver2;
while(scanf("%d%d",&n,&m)!=EOF)
{
line[0]=2;
for(i=1;i<n;i++)
line[i]=line[i-1]+2;
h=n%m;
for(j=0;j<n/m;j++)
{
s=0;
for(i=j*m;i<(j+1)*m;i++)
s=line[i]+s;
aver1=s/m;
if(j==0)
printf("%d",aver1);
else printf(" %d",aver1);
}
if(h!=0)
{
s=0;
for(i=n-h;i<n;i++)
s=s+line[i];
aver2=s/h;
printf(" %d",aver2);
}
printf("\n");
}
return 0;
}
5. 题意:青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
思维过程:这是一个在我们日常生活中能用到的一个实际问题,这个问题有两种解法,第一种是用for循环,先将啊a[1]的值赋值给max和min,然后用if判断a[i]和max,min谁大谁小,将大的值赋值给max,将小的值赋值给min,最后将a[i]连续加和减去max和min,最后求平均值;第二种方法,将数组a[i]用sort函数先排序,排完序将第一个数组值和最后一个数组值省去,剩下的数组累加求和,最后取平均值。
源代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,i,max,min,s;
double c,j;
int a[1000];
while(cin>>n)
{
s=0;
for(i=1;i<=n;i++)
{cin>>a[i];
if(i==1)
max=min=a[1];
else
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
s=s+a[i];}
j=s-max-min;
c=j/(n-2);
printf("%.2lf",c);
cout<<endl;
}
return 0;
}
6.题意:输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
思维过程:需要先将输入的数据存到一个数组中,多组输入,当输入n为0时结束,首先需要将数组中