第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分