Problem A
1.题目:输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;80~89为B;70~79为C;60~69为D;0~59为E;
输入数据有多组,每组占一行,由一个整数组成。
对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。
2.解题思路:按题目要求用分支语句,将成绩分类
3源代码“
#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
int score;
while(cin>>score) //多组输入
if (score>=90 && score <= 100) //分支语句分类
printf("A\n"); //按题目要求换行操作
else if (score>=80 && score < 90)
printf("B\n");
else if (score>=70 && score < 80)
printf("C\n");
else if (score>=60 && score < 70)
printf("D\n");
else if (score>=0 && score < 60)
printf("E\n");
else printf("Score is error!\n");
return 0;
}
Problem B
1.题目:多组输入两数,输出从小到大区间(包括边界)中的水仙花数。
2.思路:循环遍历,分离各位数,输出满足条件的数据。
3.注意事项:在最后一个数据后边不能有空格,否则会PE。应将最后一个数据单独处理。
4.源代码:
#include<iostream>
#include<cstdio>
using namespace std;
int p[1001]; //用来储存符合条件的数据
int main(){
int b=0,c=0,d=0,m,n,s=0;
while(cin>>m>>n)
{
s=0; //在下组数据操作前重置数组下标
for(int a=m;a<=n;a++){
b=a/100; //分离各位数
c=a/10%10;
d=a%10;
if(a==b*b*b+c*c*c+d*d*d)
p[++s]=a;
}
if(s==0)cout<<"no"<<endl;
else
for(int i=1;i<=s;i++){
if (i==s)cout<<p[i]<<endl; //单独处理最后一个数据
else cout<<p[i]<<" ";
}
}
return 0;
}
Problem C
- 题目:给你n个整数,求他们中所有奇数的乘积。
- 思路:判断奇偶,符合条件相乘。
- 注意事项:初始化乘积为1
- 源代码:
#include <iostream>
using namespace std;
int main()
{
int n,a[1000],i,s;
while(cin>>n)
{
s=1;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
if(a[i]%2==1)
s*=a[i];
cout<<s;
cout<<endl;
}
return 0;
}
Problem D
- 题目:对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
- 思路:核心在于判断素数,可用循环不整除的方法判断。
- 源代码:
#include <iostream>
#include<cstdio>
using namespace std;
int a[11000];
int main()
{
int b,c,e,i,m,n,j;
while(cin>>m>>n)
{
c=0;
if(m==0&&n==0) return 0;
else{
j=0;
for(i=m;i<=n;i++)
{
j++;
a[j]=i*i+i+41;
}
for(i=1;i<=j;i++)
{
for(b=2;b*b<=a[i];b++) //判断素数
{
if(a[i]%b==0)
c++;
}
}
if(c==0) printf("OK\n");
if(c!=0) printf("Sorry\n");
}
}
return 0;
}
Problem E
- 题目:去掉一个最高分和一个最低分,然后计算平均得分
- 思路:用sort排序,将第二个至倒数第二个数加起来取平均
- 源代码:
#include<iostream>
#include<cstdio>
#include<algorithm> //sort排序头文件
using namespace std;
int main()
{
int n,a[101],i;
double s=0;
while(cin>>n){
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n); //sort排序
for(i=1;i<n-1;i++)
s+=a[i]; //2到n-1求和
printf("%.2lf\n",1.0*s/(n-2));
s=0; //和清零
}
}
Problem I
1.题目:输入n(n<=100)个整数,按照绝对值从大到小排序后输出。
2.思路:冒泡排序,通过平方的大小来比较绝对值的大小
3.源代码:
#include <iostream>
using namespace std;
int main()
{
int a[100],i,j,t,n;
while(cin>>n)
{
if(n==0)
return 0;
else
{
for(i=0; i<n; i++)
cin>>a[i];
for(j=0; j<n; j++) //冒泡排序
for(i=0; i<n-1-j; i++)
if(a[i]*a[i]<a[i+1]*a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0; i<n-1; i++)
cout<<a[i]<<" ";
cout<<a[n-1]<<endl; //最后一项特殊处理
}
}
return 0;
}
Problem I
1.题目:有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
2.思路:可以直接将x带入数组,总体排序,有一点投机取巧的感觉
3.源代码:
#include<iostream>
#include<cstdio>
#include<algorithm> //sort排序头文件
using namespace std;
int main()
{
int n,m,i,a[102];
while(cin>>n>>m)
{
if(n==0&&m==0)
return 0;
else
for(i=0;i<n;i++)
cin>>a[i];
a[n]=m;
sort(a,a+n+1);
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<a[n];
cout<<endl;
}
}
}
Problem K
1.题目:最少需要准备多少张人民币,工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
2.思路:因为是最少,所以要从100开始取摸,然后将所有张数相加
3.源代码:
#include<iostream>
using namespace std;
int main()
{
int n,m,i,a,b,c,d,e,f,s[100],p=0;
while(cin>>m)
{ if(m==0)
return 0;
for(i=1;i<=m;i++)
{
cin>>n;
s[i]=0;
a=n/100;
b=(n-100*a)/50;
c=(n-100*a-50*b)/10;
d=(n-100*a-50*b-c*10)/5;
e=(n-100*a-50*b-c*10-d*5)/2;
f=n-100*a-50*b-c*10-d*5-e*2;
s[i]=a+b+c+d+e+f;
a=0,b=0,c=0,d=0,e=0,f=0;
p+=s[i];
}
cout<<p<<endl;
p=0;
}
}
Problem N
1.题目:A+B。这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
2.思路:首先后两部分的上下限都是00和59,不能超,第二,满60要进1,为了降低难度,我选择先将A,B化成秒,再取摸运算。
3.源代码:
#include<iostream>
using namespace std;
int main()
{
int n,a,b,c,d,e,f,i,s=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a>>b>>c>>d>>e>>f;
s=(a+d)*3600+(b+e)*60+c+f; //转换成秒
a=s/3600;
b=(s-a*3600)/60;
c=(s-a*3600-b*60);
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
Problem R
1.题目:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
2.思路:通过计算,差一阶有一种方法,差两阶有两种方法,差三阶有三种方法,差四阶有五种方法,是一个类似斐波那契数列的规律,先用数组定义前几节的数量,后边用程序计算
3.源代码:
#include<iostream>
using namespace std;
int main()
{
int n,m[52]={0,0,1,2},i,j,t,a,b;
for(i=4;i<=51;i++)
m[i]=m[i-1]+m[i-2]; //前两阶表示第三阶
cin>>n;
while(n--)
{
cin>>a;
cout<<m[a]<<endl;
}
return 0;
}
1.题目:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
2.思路:与爬楼梯类似,第三项等于前两项之和
3.源代码:
#include<stdio.h>
#include<math.h>
int main()
{
int N,a,b,i,t;
double m[52]={1,1,2,3};
for(i=4;i<=51;i++)
m[i]=m[i-1]+m[i-2];
scanf("%d",&N);
while(N--)
{
scanf("%d %d",&a,&b);
t=abs(a-b);
printf("%.0lf\n",m[t]);
}
return 0;
}
Problem U
1.题目:大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?
2.思路:可将输入定义为一个11为长整数,取摸100000
3.源代码:
#include<iostream>
using namespace std;
int main()
{
long long n,m; //用长整型定义输入的数据
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>m;
m=m%100000+600000;
cout<<m<<endl;
}
}
课程设计2 Problem A
1.题目:第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?
2.思路:逆推,从最后一天开始每天加1,乘2得前一天的数量。
3.源代码:
#include <iostream>
using namespace std;
int main(){
int n,i,s=1;
while(cin>>n)
{
for(i=1;i<n;i++)
s=(s+1)*2;
cout<<s<<endl;
s=1;
}
return 0;
}
课程设计2 Problem D
1.题目:一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?
2.思路:已知数乘100加00到99,满足条件输出
3.源代码
#include<stdio.h>
int a[111];
int main(){
int k,m,n,t,i,j;
while(scanf("%d%d",&m,&n)!=EOF)
{
j=0;
if(m==0&&n==0)break;
for(i=0;i<100;i++)
{
if((100*m+i)%n==0)
{
a[j]=i;
j++;
}
}
for(i=0;i<=j-1;i++)
{
if(i!=j-1)
{
if(a[i]<10)printf("0%d ",a[i]);
else printf("%d ",a[i]);
}
if(i==j-1)
{
if(a[i]<10) printf("0%d",a[i]);
else printf("%d",a[i]);
}
}
printf("\n");
}
return 0;
}
课程设计2 Problem G
1.题目:有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,这种整数到底存不存在
2.思路:遍历区间内整数是否满足条件
3.源代码:
#include<stdio.h>
int main()
{
int n,m,i,j,k,l,s;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0) return 0;
s=0;
for(i=0,j=0;i<=10000,j>=-10000;i++,j--)
if((n-i)*i==m||(n-j)*j==m){printf("Yes\n");s++;break;}
if(s==0) printf("No\n");
}
}
本周课程设计与学期汇总总结
这周的课程设计题真的挺难的,不管是思路上还是写程序上都提高很多,也收获了很多东西,像第一次接触acos函数,频繁的多组输入,巩固了之前不在意的知识,很多类似斐波那契的题目,大大增强了数学和编程能力。还有很多严格的格式要求,类似行末不能空格等很多要求,刚开始不注意总是PE,后来才慢慢改善,总的来讲真的学到了很多。三天在机房敲代码的日子真的很难忘,我会一直记得,这种练习也为期末的考试打下了坚实基础,真的很感谢这三天。
时间真快啊,一学期的程序设计就到了尾声,真的挺舍不得的,从小白到自主写程序,确实付出了挺多,也曾有那么几个夜晚肝到1点多,虽不是大佬,但也欣喜于自己的长足进步。特别感谢费老师的严格,这是促使我们奋进的原动力,也真的是他的无私奉献才换来农大计算机目前稳步前进的状态,可惜下学期就没有程序设计课了,好难过,我会一直记得这段时光。哦,对了,还有ACM的学长学姐,他们也付出很多,每周末从本校跑来讲课,一讲就是一上午,平时也总向她们提问各种问题,从来都是耐心解答,真的很感谢。
这就是我与程序设计的故事,也许告一段落,也许有缘再见,祝费老师一切安好,学长学姐学习顺利,农大ACM再创佳绩。