华中科技大学SPOC编程题期末(2020年秋季)

1计算旅程所需时间(20分)
题目内容:

在一行中给出火车的出发时间,换行后再输入到达天数和到达时间,其间以空格分隔。火车如果是当天到达则天数为0,隔天到达天数为1,一次类推。出发时间和到达时间用4位整数表示,高2位为2位小时数(00-23),低2位位2位分钟数(00-59),如果高位为0则不输入。

输入格式:

第一行输入出发时间

第二行先输入到达天数,空一格后在输入到达时间

输出格式:

输出整个旅程所需时间小时分钟。如果不满1小时则只显示分钟。如果是整数小时则只显示小时。

输入样例:

1700

1 915

输出样例:

扫描二维码关注公众号,回复: 12276367 查看本文章

16小时15分钟

输入样例:

30

0 1915

输出样例:

18小时45分钟

时间限制:500ms内存限制:32000kb

#include <iostream>
#include <cmath>
using namespace std;


 int main()

 {
    
    
	 int s=0,e=0,d=0,h=0,m=0;
	 int i=0,j=0,sum=0;
	 cin>>s;
	 cin>>d;
	 cin>>e;
	 int s1=s,e1=e;
	 int h1=0,h2=0,m1=0,m2=0;
	 for(i=0;i<2;i++)
	 {
    
    m1=(s1%10)*pow((double)10,i)+m1;
	 s1=s1/10;
	 }
	 	 for(i=0;i<2;i++)
	 {
    
    h1=(s1%10)*pow((double)10,i)+h1;
	 s1=s1/10;
	 }
			 for(i=0;i<2;i++)
	 {
    
    m2=(e1%10)*pow((double)10,i)+m2;
	 e1=e1/10;
	 }
			 	 for(i=0;i<2;i++)
	 {
    
    h2=(e1%10)*pow((double)10,i)+h2;
	 e1=e1/10;
	 }
				
	m=m2-m1;h=h2-h1;
	h=h+24*d;
	 if(m<0)
	 {
    
    
		 m=m+60;h=h-1;
	 }
	 if(h==0)
	 {
    
    
cout<<m<<"分钟"<<endl;j=1;
	 }
	 
	 if(m==0)
	 {
    
    cout<<h<<"小时"<<endl;j=1;
	 }
	 if(j==0)
	 cout<<h<<"小时"<<m<<"分钟"<<endl;
	 return 0;
 }

2自然数表示(20分)
题目内容:

输入小于1000的一个自然数,将它表示成连续自然数之和,输出所有的表示方式。

例如:9=2+3+4=4+5

如果该自然数不能表示成连续自然数之和,则输出自身的值。

例如: 1=1,8=8

输入格式:输入一个自然数(小于1000的正整数)

输出格式:输出所有它能表示的和式(加数从小到大)

输入样例:21

输出样例:

21=1+2+3+4+5+6

21=6+7+8

21=10+11

输入样例:

1

输出样例:

1=1

时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
int main()
{
    
    
	int n,i,j,sum=0,flag=1;
	cin>>n;
    for(i=1;i<=n;i++)
	{
    
    
		sum=0;
		for(j=i;j<n;j++)
		{
    
    
			sum=sum+j;
			if(sum==n)
			{
    
    
				flag=0;
				cout<<n<<"=";
				for(int k=i;k<j;k++)
					cout<<k<<"+";
				cout<<j<<endl;
				
				break;
			}
			if(sum>n)
			{
    
    
				break;
			}
			else
				continue;
		}
	}
	if(flag)
		cout<<n<<"="<<n<<endl;
	return 0;
}

3求最高分及编号(20分)
题目内容:

设有10位同学姓名分别是: 张红,王丽,李明,王明,刘少阳,刘明洋,欧阳少阳,李丽,李莉,欧明。编号分别是1到10的整数,依次输入这10位同学的c++课程考试成绩,输出最高分,最高分的学生人数以及最高分同学的编号和姓名。如果有多位同学获得最高分,要求全部输出。

注意:为了防止中英文符号和文字缺失导致的判分错误,在写输出语句时请一定要从输出样例中拷贝中文文字和标点符号使用

输入格式:

依次输入10个学生的成绩

输出格式:

输入样例:

99 98 97 100 96 95 94 100 93 100

输出样例: 注意数据之间是2个英文空格。

最高分为100

获得最高分的共有3人

获得最高分的同学编号和姓名为:

4 王明

8 李丽

10 欧明

时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
double max(double a[],int n)
{
    
    
	int m=a[0];
	for(int i=0;i<n;i++)
	{
    
    
		if(a[i]>m)
			m=a[i];
	}
	return m;
}
double num(double a[],int n,double m)
{
    
    
	int p=0;
	for(int i=0;i<n;i++)
	{
    
    
		if(a[i]==m)
			p++;
	}
	return p;
}
int main()
{
    
    
	double a[10];
	for(int i=0;i<10;i++)
	{
    
    
		cin>>a[i];
	}
	char b[10][20]={
    
    "张红","王丽","李明","王明","刘少阳","刘明洋","欧阳少阳","李丽","李莉","欧明"};
	cout<<"最高分为"<<max(a,10)<<endl;
	cout<<"获得最高分的共有"<<num(a,10,max(a,10))<<"人"<<endl;
	cout<<"获得最高分的同学编号和姓名为:"<<endl;
	for(int i=0;i<10;i++)
	{
    
    
		if(a[i]==max(a,10))
		{
    
    
			cout<<i+1<<"  "<<b[i]<<endl;
		}
	}
	return 0;
}

4求图书ISBN的校验码(20分)
题目内容:

每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 9 位数字、1 位识别码和 3 位分隔符,其规定格式如:“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如“1-673-82169-3”就是一个标准的 ISBN 码。

ISBN 码的首位数字表示书籍的出版语言,例如,符号“1”代表数学;第一个分隔符“-”之后的三位数字代表出版社代码,第二个分隔符后的五位数字“82169”代表该书在该出版社的编号;最后一位识别码的计算方法:

1、第1 位数字乘以 1,加上第2 位数字乘以 2,再加上第 3 位数字乘以 3,……,以此类推;

2、再把所得结果对 11 求余,所得的余数即为识别码,如果余数为 10,则识别码为大写字母 X。

代码:(编写函数ISBN,完善以下代码)

#include
#include
using namespace std;
int main()
{
char charISBN11[12], charISBN[14],*ch;
cin>>charISBN11;
ch=ISBN(charISBN11,charISBN);
cout<<ch<<endl;
return 0;
}输入格式:

输入ISBN的前11位字符

输出格式:

输出完整的ISBN码。

输入样例:

1-673-82169

输出样例:

1-673-82169-3

时间限制:500ms内存限制:32000kb

#include <iostream>

#include <cstring>

using namespace std;

char * ISBN(char m[])
{
    
    int sum=0,i=0,j,n=1;
	for(i=0;i<11;i++)
	{
    
    
		if(m[i]=='-')
		continue;
		j=m[i];
		j=j-48;
		sum=n*j+sum;n++;
	}
	j=sum%11;
	char *a=new char[100];
	for(i=0;i<11;i++)
		a[i]=m[i];
	if(j==10)
	{
    
    a[11]='-';a[12]='X';a[13]='\0';}
	else
	{
    
    a[11]='-';a[12]=(char)(sum%11+'0');a[13]='\0';}

	
	return a;

}
int main()

{
    
    
    char charISBN11[12], *charISBN;

    cin>>charISBN11;

    charISBN=ISBN(charISBN11);

    cout<<charISBN<<endl;

    delete charISBN;

	getchar();
    return 0;

}

5实现字符串类的相关操作(20分)
题目内容:定义一个字符串类Cstring,要求该类能实现字符串的复制,求字符串的长度,比较两个字符串的大小,求字符串指定长度的左子字符串和指定长度右子字符串。

主函数如下,请补充cstring 类的定义使程序完整。

int main()
{ cstring s1(“abcdef”),s2;
char ch[200];
cin.getline(ch,200);
s2.init(ch);
cout<<s1.compare(s2)<<endl;
cout<<s1.length()<<endl;
cout<<s2.length()<<endl;
s1.copy(s2);
cout<<s1.compare(s2)<<endl;
cout<<s1.length()<<endl;
cout<<s2.length()<<endl;
s1.disp();
s2.disp();
char x[10],y[10];
s1.left(x,3);
s1.right(y,4);
cout<<x<<endl;
cout<<y<<endl;
return 0;
}

输入格式:

输入一个字符串

输出格式:

输入样例:

abcdefgh

输出样例:

-103

6

8

0

8

8

abcdefgh

abcdefgh

abc

hgfe

时间限制:500ms内存限制:32000kb

#include <iostream>
#include <cmath>
#include<cstring>
using namespace std;
class cstring
{
    
    private:
char c[200];
public:
	cstring(){
    
    ;}
	cstring(char a[]){
    
    strcpy(c,a); }
	void init(char b[]){
    
    strcpy(c,b); }
	int compare(cstring d){
    
     
		int i=0;int m=0;
	while(c[i]!=0&&d.c[i]!=0)
	{
    
    
		
		if(d.c[i]==c[i])
			i++;
		else break;
		
	}
		 m=-d.c[i]+c[i]; return m;
	}
	int length(){
    
    return strlen(c);}
	void copy(cstring e){
    
     strcpy(c,e.c);}
	void disp(){
    
    cout<<c<<endl;}
	void left(char m[],int n){
    
     
		for(int i=0;i<n;i++)
			m[i]=c[i];
		m[n]=0;
	}
	void right(char u[],int o)
	{
    
    int l=strlen(c);
		for(int i=0;i<o;i++)
			u[i]=c[l-1-i];
		u[o]=0;
		
	}
};


int main()
 {
    
     cstring  s1("abcdef"),s2;
  char ch[200];
  cin.getline(ch,200);
  s2.init(ch);
  cout<<s1.compare(s2)<<endl;
  cout<<s1.length()<<endl;
  cout<<s2.length()<<endl;
  s1.copy(s2);
  cout<<s1.compare(s2)<<endl;
  cout<<s1.length()<<endl;
  cout<<s2.length()<<endl;
  s1.disp();
  s2.disp();
  char x[10],y[10];
  s1.left(x,3);
  s1.right(y,4);
  cout<<x<<endl;
  cout<<y<<endl;
  return 0;
 }

猜你喜欢

转载自blog.csdn.net/weixin_51236357/article/details/112408043