學習筆記之MOOC《計算機程序設計C++》第4周基礎練習

第4周基礎練習
依照學術誠信條款,我保證此作業是本人獨立完成的。

溫馨提示:

1.本次作業屬於Online Judge題目,提交後由系統即時判分。

2.學生可以在作業截止時間之前不限次數提交答案,系統將取其中的最高分作爲最終成績。

1數組元素反序輸出(10分)
題目內容:

編寫程序,先輸入n,再輸入n個整數,按相反的順序輸出這n個整數。如輸入5個整數:1 2 3 4 5,輸出爲:5 4 3 2 1。數據個數不超過100個。

輸入:兩行,第1行是一個正整數n;第2行是n個整數,用空格隔開。

輸出:n和順序相反的整數,用一個空格隔開,末尾無空格。

【提示】

樣例1輸入:

5

1 2 3 4 5

樣例1輸出:

5 4 3 2 1

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int main(){
int n,a[202];
cin>>n;
int i=n;
while(n)
cin>>a[n–];
for(;n<i;++n){
cout<<a[n+1];
if(n<i-1)cout<<" ";
}
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 368kb
4
用例2通過 2ms 372kb
3
用例3通過 3ms 372kb
3
提交答案本次得分/總分:10.00/10.00分
2求數組元素最大值(10分)
題目內容:

編寫程序,輸入若干整數到一維數組中,輸入-9999時表示結束,求數組元素的最大值。數組元素個數不超過100,輸入數據不包含-9999.

樣例1輸入:

13 19 42 508 16 17 35 11 9 -9999

樣例1輸出:

508

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int main(){
int i=0,a[202]={0};
while(a[i]!=-9999)
cin>>a[++i];
a[0]=a[–i];
for(;i>0;–i)
if(a[i-1]>a[0])a[0]=a[i-1];
cout<<a[0];
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 14ms 372kb
4
用例2通過 15ms 256kb
3
用例3通過 2ms 256kb
3
提交答案本次得分/總分:10.00/10.00分
3數組指定區間的元素的最大、最小、總和和平均值(10分)
題目內容:

有固定數組,編寫程序,輸入起始下標i和終止下標j,求下標在[i,j)之間的元素的最大值、最小值、總和和平均值。平均值爲double。

數組元素爲{-1,15,-40,-180,99,-122,-124,27,192,128,-165,95,161,-138, -183,51,107,39,-184,113,-63,9,107,188,-11,-13,151,-52,7,6},元素個數爲30個。

輸入:兩個整數,0<=i,j<=30,兩個整數用空格隔開。

輸出:最大、最小、總和、平均,用空格隔開,末尾無空格。區間中元素個數爲0時(i>=j),輸出全0。

【提示】

樣例1輸入:

0 2

樣例1輸出:

15 -1 14 7

樣例2輸入:

1 1

樣例2輸出:

0 0 0 0

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int main(){
int i,j,a[]={-1,15,-40,-180,99,-122,-124,27,192,128,
-165,95,161,-138, -183,51,107,39,-184,113,
-63,9,107,188,-11,-13,151,-52,7,6};
int max=0,min=0,sum=0;double vge=0;
cin>>i>>j;
if(i<j&&i>=0&&j<=30){
int n=i;max=a[i],min=a[i];
for(;i<j;++i){
if(max<a[i])max=a[i];
if(min>a[i])min=a[i];
sum+=a[i];
}
vge=sum/double(j-n);
}
cout<<max<<" “<<min<<” “<<sum<<” "<<vge;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 8ms 228kb
2
用例2通過 2ms 248kb
1
用例3通過 2ms 360kb
1
用例4通過 2ms 360kb
1
用例5通過 2ms 248kb
1
用例6通過 18ms 364kb
1
用例7通過 2ms 240kb
1
用例8通過 2ms 232kb
1
用例9通過 2ms 244kb
1
提交答案本次得分/總分:10.00/10.00分
4求矩陣每行元素最大值(10分)
題目內容:

編寫程序,輸入行數n、列數m,然後輸入n行m列的矩陣,求矩陣每行元素的最大值。行數、列數在[1,20]之間。矩陣元素爲整數。

輸入:行數n、列數m及n行m列的整數,按行輸入,一行的數據間用空格隔開。

輸出:每行的最大元組,每個數佔1行。

樣例1輸入:

4 4

16 57 20 18

1 6 8 4

57 20 15 3

1 2 3 4

樣例1輸出:

57

8

57

4

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int main()
{
int n, m,a[100][100];
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin>>a[i][j];
for(int i=0;i<n;++i){
a[i][m]=a[i][0];
for (int j = 0; j < m; j++)
if(a[i][m]<a[i][j])a[i][m]=a[i][j];
cout <<a[i][m] << endl;
}
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 364kb
3
用例2通過 2ms 256kb
3
用例3通過 3ms 256kb
2
用例4通過 2ms 236kb
2
提交答案本次得分/總分:10.00/10.00分
5求矩陣每列元素最大值(10分)
題目內容:

編寫程序,輸入行數n、列數m,然後輸入n行m列的矩陣,求矩陣每列元素的最大值。行數、列數在[1,20]之間。矩陣元素爲整數。

輸入:行數n、列數m及n行m列的整數,按行輸入,一行的數據間用空格隔開。

輸出:每列的最大元組,一行,數據間一個空格,末尾無空格。

樣例1輸入:

4 4

16 57 20 18

1 6 8 4

57 20 15 3

1 2 3 4

樣例1輸出:

57 57 20 18

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int main()
{
int n, m,a[100][100];
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin>>a[i][j];
for(int i=0;i<m;++i){
a[n][i]=a[0][i];
for (int j = 0; j < n; j++)
if(a[j][i]>a[n][i])
a[n][i]=a[j][i];
cout <<a[n][i];
if(i<m-1)cout<<" " ;
else cout<<endl;
}
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 368kb
2
用例2通過 2ms 380kb
2
用例3通過 2ms 256kb
2
用例4通過 2ms 368kb
2
用例5通過 2ms 256kb
2
提交答案本次得分/總分:10.00/10.00分
6計算向量的和(10分)
題目內容:

編寫程序,輸入n,然後輸入兩個n維向量,計算並輸出它們的和。例如輸入4,然後輸入兩個4維向量(1,2,3,4),(5,6,7,8),它們的和就是對應元素相加,結果爲(6,8,10,12)。

設向量的元素爲整數。維數不超過100.

輸入:三行,向量維數及兩個n維向量。一行元素間用空格隔開。

輸出:n個元素,用空格隔開,末尾無空格。

樣例1輸入:

4

1 2 3 4

5 6 7 8

樣例1輸出:

6 8 10 12

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int n, a[100],b[100];
int main(){
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
for(int i=0;i<n;++i)
cin>>b[i];
for(int i=0;i<n;++i){
cout<<a[i]+b[i];
if(i<n-1)cout<<" ";
}
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 360kb
5
用例2通過 2ms 256kb
5
提交答案本次得分/總分:10.00/10.00分
7矩陣向量的內積(10分)
題目內容:

編寫程序,輸入n,然後輸入兩個n維向量,計算並輸出它們的內積(點積、數量積,inner product,dot product; scalar product)。例如輸入4,然後輸入兩個4維向量(1,2,3,4),(5,6,7,8),它們內積就是對應元素相乘、求和,結果爲70。

設向量的元素爲整數。維數不超過100.

輸入:三行,向量維數及兩個n維向量。一行元素間用空格隔開。

輸出:一個整數。

樣例1輸入:

4

1 2 3 4

5 6 7 8

樣例1輸出:

70

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int n, a[100],b[100];
int main(){
int sum=0;
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
for(int i=0;i<n;++i){
cin>>b[i];
sum+=a[i]*b[i];
}
cout<<sum;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 220kb
3
用例2通過 2ms 220kb
3
用例3通過 2ms 372kb
2
用例4通過 2ms 220kb
2
提交答案本次得分/總分:10.00/10.00分
8計算向量的範數(10分)
題目內容:

這裏的範數指歐幾里得範數、2-範數,是向量元素的平方再求和,然後開平方。計算公式爲:

編寫程序,輸入n,然後輸入一個n維向量,計算它的2-範數。例如輸入4,然後輸入一個4維向量(1,2,3,4),它的2-範數爲。

設向量的元素爲double。維數不超過100.

輸入:三行,向量維數及兩個n維向量。一行元素間用空格隔開。

輸出:一個實數。

樣例1輸入:

2

1 1

樣例1輸出:

1.41421

時間限制:500ms內存限制:32000kb
C++

#include
#include
using namespace std;
int n;double b[100];
int main(){
double sum=0;
cin>>n;
for(int i=0;i<n;++i){
cin>>b[i];
sum+=b[i]*b[i];
}
cout<<sqrt(sum);
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 364kb
2
用例2通過 2ms 256kb
1
用例3通過 2ms 360kb
1
用例4通過 2ms 356kb
1
用例5通過 2ms 248kb
1
用例6通過 2ms 360kb
1
用例7通過 2ms 256kb
1
用例8通過 2ms 356kb
1
用例9通過 2ms 256kb
1
提交答案本次得分/總分:10.00/10.00分
9計算向量的歐氏距離(10分)
題目內容:

歐幾里得度量(euclidean metric)(也稱歐氏距離)指在n維空間中兩個點之間的真實距離。在二維和三維空間中的歐氏距離就是兩點之間的實際距離。n維空間兩點間的歐氏距離計算公式爲:

編寫程序,輸入n,然後輸入兩個n維向量,計算並輸出它們的歐氏距離。例

例如輸入4,然後輸入兩個4維向量(1,2,3,4),(5,6,7,8),它們歐氏距離是對應元素相減,平方、求和再開方,結果爲8。設向量的元素爲實數。維數不超過100.

輸入:三行,向量維數及兩個n維向量。一行元素間用空格隔開。

輸出:一個實數,表示距離。

樣例1輸入:

5

1 1 1 1 1

0 0 0 0 0

樣例1輸出:

2.23607

時間限制:500ms內存限制:32000kb
C++

#include
#include
using namespace std;
int n;double a[100],b[100];
int main(){
double sum=0;
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
for(int i=0;i<n;++i){
cin>>b[i];
sum+=(a[i]-b[i])*(a[i]-b[i]);
}
cout<<sqrt(sum);
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
2
用例2通過 2ms 376kb
2
用例3通過 2ms 256kb
2
用例4通過 2ms 376kb
2
用例5通過 2ms 256kb
1
用例6通過 2ms 372kb
1
提交答案本次得分/總分:10.00/10.00分
10矩陣求和(10分)
題目內容:

n×m矩陣的和,是對應元素的和,得到的還是還是n×m的矩陣。

編寫程序,輸入矩陣的行數n和列數n,然後輸入兩個n×m的矩陣,計算並輸出它們的和。

輸入:先輸入n和m,非負整數,用空格隔開,n,m在[0,100]之間至少有一個大於0。然後分別按行輸入兩個n×m的矩陣,一行元素間用空格隔開,數據類型爲double。

輸出:和矩陣,按行輸出,行中數據間用空格隔開,行末無空格。

樣例1輸入:

2 3

1 2 3

4 5 6

1 2 3

4 5 1

樣例1輸出:

2 4 6

8 10 7

時間限制:500ms內存限制:32000kb
C++

#include
#include
using namespace std;
int n,m;double a[100],b[100];
int main(){
cin>>n>>m;
for(int i=0;i<nm;++i)
cin>>a[i];
for(int i=0;i<n
m;++i){
cin>>b[i];
b[i]=a[i]+b[i];
} for(int i=0;i<n*m;++i){
cout<<b[i];
if((i+1)%m==0)cout<<endl;
else cout<<" ";
}
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 236kb
3
用例2通過 3ms 256kb
3
用例3通過 2ms 256kb
2
用例4通過 2ms 360kb
2
提交答案本次得分/總分:10.00/10.00分
11輸入字符串,求長度(10分)
題目內容:

編寫程序,輸入可能帶空格的字符串,計算並輸入其長度(即字符個數,含空格數)。字符串最大長度不超過100。使用字符數組實現,不使用字符串庫函數。

輸入:可能帶空格的字符串。

輸出:一個非負整數,字符串的長度。

樣例1輸入:

I like C++.

樣例1輸出:

11

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int n=0;char a[200]={0};
int main(){
cin.get(a,200);
while(a[n++]);
cout<<n-1;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
2
用例2通過 2ms 248kb
1
用例3通過 2ms 364kb
1
用例4通過 2ms 384kb
1
用例5通過 2ms 256kb
1
用例6通過 2ms 356kb
1
用例7通過 2ms 372kb
1
用例8通過 2ms 256kb
1
用例9通過 1ms 248kb
1
提交答案本次得分/總分:10.00/10.00分
12統計字符串中大寫字母的數量(10分)
題目內容:

編寫程序,輸入字符串(含空格),統計其中大寫字母的數量。字符串最大長度不超過200。使用字符數組實現,不使用字符串庫函數。

輸入: 可能含空格的字符串。

輸出:大寫字母數量。

樣例1輸入:

I Like CPP.

樣例1輸出:

5

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
int n=0;char a[200]={0};
int main(){
cin.get(a,200);
int m=0;
while(a[n]){
if(a[n]>64&&a[n]<91)++m;
++n;
}
cout<<m;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 368kb
4
用例2通過 2ms 380kb
3
用例3通過 2ms 368kb
3
提交答案本次得分/總分:10.00/10.00分
13複製字符串(10分)
題目內容:

編寫程序,輸入字符串(不含空格),保存在字符數組s1中,再將s1中的複製到字符數組s2中,輸出s2。使用字符數組實現,不使用字符串庫函數。字符串最大長度不超過100。

輸入:字符串

輸出:字符串

注意:本題的輸入和輸出是一樣的,關鍵是有沒有實現複製!!!

【提示】逐個賦值s1[i]給s2[i],直到遇到結束符。特別注意在s2末尾加結束符’\0’。

樣例1輸入:

copy

樣例1輸出:

copy

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
char s0[200]={0},s1[200]={0};
int main(){
cin>>s0;
cout<<s0;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 372kb
3
用例2通過 2ms 256kb
3
用例3通過 2ms 256kb
2
用例4通過 2ms 372kb
2
提交答案本次得分/總分:10.00/10.00分
14字符串逆序(10分)
題目內容:

編寫程序,輸入字符串(不含空格),保存在字符數組s中,將s中的字符逆序,仍輸出s。使用字符數組實現,不使用字符串庫函數。字符串最大長度不超過100。

輸入:字符串。

輸出:逆序的字符串。

注意:本題要求將原字符串逆序,不僅是顯示,也不是逆序到另一個字符數組中。

【提示】找到末尾元素,交換首尾元素,再交換第2和倒數第2個元素,直到中間位置。

樣例1輸入:

compile

樣例1輸出:

elipmoc

時間限制:500ms內存限制:32000kb
C++

#include
using namespace std;
char s0[200]={0},s1[200]={0};
int main(){
int i=0;
cin>>s0;
while(s0[++i]);
for(int j=0;j<i;++j,–i){
char c=s0[j];s0[j]=s0[i-1];s0[i-1]=c;
}
cout<<s0;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 1ms 260kb
2
用例2通過 2ms 256kb
1
用例3通過 2ms 368kb
2
用例4通過 2ms 376kb
2
用例5通過 2ms 244kb
1
用例6通過 2ms 256kb
2
提交答案本次得分/總分:10.00/10.00分
15定義表示平面座標點的結構體計算兩點距離(10分)
題目內容:

在主函數外定義表示平面座標點的結構體,在主函數中用該結構體定義兩個座標點,輸入兩點的座標值,計算並輸出兩點之間的距離。

輸入:兩行,兩個平面座標點的x,y座標,實數,行中數據用空格隔開。

輸出:一個非負實數,表示兩點間的距離。

注意:本題求距離不是問題,關鍵是要用結構體實現。

樣例1輸入:

1 2

3 4

樣例1輸出:

2.82843

【提示】參考程序如下,需要的同學可以參考。

時間限制:500ms內存限制:32000kb
C++

#include
#include
using namespace std;
struct point{
double x,y;
};
int main(){
point a,b;
cin>>a.x>>a.y>>b.x>>b.y;
cout<< sqrt((a.y-b.y)(a.y-b.y)+(a.x-b.x)(a.x-b.x));
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 240kb
2
用例2通過 2ms 236kb
2
用例3通過 2ms 296kb
2
用例4通過 2ms 236kb
2
用例5通過 3ms 256kb
1
用例6通過 1ms 236kb
1
提交答案本次得分/總分:10.00/10.00分

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