学习笔记《计算机程序设计C++》第4周中级练习

第4周中级练习

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1矩阵原地转置(10分)
题目内容:

编写程序,将N(N<=10)阶方阵(整型)原地转置(只能使用一个二维数组),例如:

转置前的方阵A

5 6 7 9

2 8 5 4

3 7 16 15

1 4 8 11

转置后的方阵A

5 2 3 1

6 8 7 4

7 5 16 8

9 4 15 11

注意:转置要使矩阵本身作转置运算,而不仅是在屏幕显示转置效果。

输入格式:

N+1行,第1行:数字N(10>=n>0);第2-(N+1)行:N阶方阵的元素

输出格式:

N行,转置后的矩阵。每行数据间用一个空格隔开,末尾无空格。

输入样例:

4

5 6 7 9

2 8 5 4

3 7 16 15

1 4 8 11

输出样例:

5 2 3 1

6 8 7 4

7 5 16 8

9 4 15 11

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

#include
using namespace std;
int a[100][100];
int main(){
int n;
cin>>n;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin>>a[i][j];
for(int i=0;i<n;++i)
for(int j=i;j<n;++j){
int tmp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=tmp;
}
for(int i=0;i<n;++i){
for(int j=0;j<n-1;++j)
cout<<a[i][j]<<" ";
cout<<a[i][n-1]<<endl;
}
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 380kb
2
用例3通过 14ms 256kb
2
用例4通过 2ms 372kb
2
用例5通过 2ms 256kb
2
提交答案本次得分/总分:10.00/10.00分
2判断对称矩阵(10分)
题目内容:

判断一个N阶整型矩阵是否为对称矩阵。要求矩阵用一维数组存储。

输入格式:

N+1行,第1行:数字N(10>n>0);第2-(N+1)行:N阶方阵的元素

输出格式:

“Yes”或“No”

输入样例:

4

5 6 7 9

2 8 5 4

3 7 16 15

1 4 8 11

输出样例:

No

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

#include
using namespace std;
int a[100][100];
bool isdcjj(int n){
for(int i=0;i<n;++i)
for(int j=i;j<n;++j){
if(a[i][j]!=a[j][i])
return 0;
}
return 1;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin>>a[i][j];
if(isdcjj(n))cout<<“Yes”;
else cout<<“No”;
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 232kb
2
用例2通过 2ms 364kb
2
用例3通过 7ms 256kb
2
用例4通过 2ms 236kb
2
用例5通过 3ms 236kb
2
提交答案本次得分/总分:10.00/10.00分
3去掉字符串末尾的空格(10分)
题目内容:

编写程序,去掉字符串末尾的空格符。要求字符串用字符数组存放,不使用库函数。结果要显示原字符串和删除末尾空格后的字符串。字符串长度不超过100.

输入格式:

一个字符串

输出格式:

两行:第一行,原字符串;第二行,删除末尾空格后的字符串。注意,将原字符串和删除空格后的字符串均放到‘|’’|’中。

输入样例:

strd sdf

输出样例:

|strd sdf |

|strd sdf|

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

#include<iostream>
using namespace std;
char a[100];
int main(){
	cin.getline(a,100);
	cout<<"|"<<a<<"|"<<endl;
	int i=0;
	while(a[i++]){
		if(a[i]==' '&&a[i+1]=='\0'){
			a[i--]='\0';
			--i;
		}
	}
	cout<<"|"<<a<<"|"<<endl;

	return 0;
} 

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 240kb
2
用例2通过 2ms 368kb
2
用例3通过 2ms 364kb
2
用例4通过 2ms 256kb
2
用例5通过 2ms 256kb
2
提交答案本次得分/总分:10.00/10.00分
4去掉字符串开头的空格符(10分)
题目内容:

编写程序,去掉字符串开头的空格符。要求字符串用字符数组存放,不使用库函数。字符串长度不超过100.

输入格式:一个字符串

输出格式:两行:第一行,原字符串;第二行,删除开头空格后的字符串。注意,将原字符串和删除空格后的字符串均放到‘|’’|’中。参照样例。

输入样例:

strd sdf

输出样例:

| strd sdf|

|strd sdf|

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

#include<iostream>
using namespace std;
char a[100];
int main(){
	cin.getline(a,100);
	cout<<"|"<<a<<"|"<<endl;
	cout<<"|";
	int i=0;
	if(a[0]==' '){
		while(a[i++]==' ');
		i--;
	}
	while(a[i])
		cout<<a[i++];
    cout<<"|"<<endl;

	return 0;
} 

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 356kb
2
用例2通过 2ms 372kb
2
用例3通过 2ms 256kb
2
用例4通过 2ms 260kb
2
用例5通过 3ms 256kb
2
提交答案本次得分/总分:10.00/10.00分
5去掉字符串中间的所有空格(10分)
题目内容:

编写程序,去掉字符串中间的所有空格(保持两头的空格)。要求字符串用字符数组存放,不使用库函数。字符串长度不超过100.

输入格式:一个字符串

输出格式:两行:第一行,原字符串;第二行,删除中间空格后的字符串。注意,将原字符串和删除空格后的字符串均放到‘|’’|’中。参照样例。

输入样例:

strd sdf

输出样例:

|strd sdf|

|strdsdf|

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

#include<iostream>
using namespace std;
char a[100];
int main(){
	cin.getline(a,100);
	cout<<"|"<<a<<"|"<<endl;
	cout<<"|";
	int i=0;
	while(a[i]==' ')cout<<a[i++];
	while(a[i]){
		if(a[i]!=' ')
			cout<<a[i];
		++i;
	}
	--i;
	while(a[i]==' ')cout<<a[i--];
    cout<<"|"<<endl;

	return 0;
} 

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 360kb
2
用例2通过 2ms 376kb
2
用例3通过 3ms 256kb
2
用例4通过 2ms 256kb
2
用例5通过 2ms 256kb
2
提交答案本次得分/总分:10.00/10.00分
6查找子串(10分)
题目内容:

编写程序,在字符串中查找子字符串,找到则返回第一个字符所在的位置(从1开始),找不到则显示“没有该子串”。要求字符串用字符数组存放,不使用库函数。字符串长度不超过100.

输入格式:

两行:第一行为待查找的字符串;第二行为要查找的子字符串。

输出格式:

第一个字符所在的位置(从1开始),若找不到则显示“没有该子串”。

输入样例1:

This is a book!

is

输出样例1:

3

输入样例2:

This is a book!

isa

输出样例2:

没有该子串

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

#include
using namespace std;
char a[200]={0};
char a0[200]={0};
int main(){
cin.getline(a,110);
cin.getline(a0,110);
int i=0,j=0;
while(a[i]){
while(a0[j])
if(a[i]==a0[j]&&a[i]!=’\0’){
++i;++j;
}
else{
i-=j;
j=0;
break;
}
if(j){
cout<<i-j+1;
break;
}
++i;
}
if(!j)cout<<“没有该子串”;
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 11ms 368kb
2
用例2通过 3ms 372kb
2
用例3通过 2ms 364kb
2
用例4通过 3ms 256kb
2
用例5通过 2ms 256kb
2
提交答案本次得分/总分:10.00/10.00分
7排序(10分)
题目内容:

输入n个整数,对它们进行排序,从大到小输出。0<n<=100。注意,不应使用别人写的库函数。

输入格式:

两行,第1行为元素个数n;第2行为n个整数,用空格隔开。

输出格式:

n个排好序的整数,从大到小用一个空格隔开,末尾无空格。

输入样例:

5

1 2 5 4 3

输出样例:

5 4 3 2 1

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

#include
using namespace std;
int a[103];
int main()
{
int n;
cin>>n>>a[0];
for(int i=1;i<n;++i){
cin>>a[i];
for(int j=0;j<=i;++j){
if(a[i]>a[j]){
int tem=a[i];
a[i]=a[j];
a[j]=tem;
}
}
}
for(int i=0;i<n-1;++i)
cout<<a[i]<<" ";
cout<<a[n-1]<<endl;
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 376kb
2
用例3通过 2ms 256kb
2
用例4通过 2ms 256kb
2
用例5通过 2ms 368kb
2
提交答案本次得分/总分:10.00/10.00分
8二分查找(10分)
题目内容:

从小到大输入若干整数(不超过300),以-99999为结束符,然后再输入一个整数x,z在前面的整数中用二分查找法查找x,若找到,显示数的下标(即从0开始的序号);若找不到,显示-1。注意,不应使用别人写的库函数。

输入格式:

若干整数。

输出格式:

一个下标

输入样例:

1 2 3 4 5 -99999

2

输出样例:

1

时间限制:200ms内存限制:32000kb
C++

#include
using namespace std;
int a[333];
int main(){
int i=0,s;
cin>>a[0];
while(a[i]!=-99999){
cin>>a[++i];
}
cin>>s;
int l=0,r=i-1,mid;
for(;l<=r;){
mid=l+(r-l)/2;
if(s==a[mid]){
cout<<mid;
break;
}
else if(s>a[mid])
l=mid+1;
else r=mid-1;
}

if(l>r)cout<<-1;
return 0;

}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
1
用例2通过 2ms 368kb
1
用例3通过 2ms 376kb
1
用例4通过 2ms 368kb
1
用例5通过 2ms 372kb
1
用例6通过 23ms 368kb
1
用例7通过 24ms 368kb
2
用例8通过 3ms 368kb
2
提交答案本次得分/总分:10.00/10.00分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章