學習筆記MOOCM《計算機程序設計C++》第三週中級練習

第3週中級練習

依照學術誠信條款,我保證此作業是本人獨立完成的。

溫馨提示:

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

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

1計算1!+2!+3!+…+n!(10分)
題目內容:

輸入n(0<n<13),計算1!+2!+3!+4!+…+n!。

輸入格式:

整數n(0<n<13)

輸出格式:

非負整數

輸入樣例:

5

輸出樣例:

153

技巧提示:利用前一個通項計算後一個通項。

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

#include <iostream>
using namespace std;
#define maxn 101
int jc(int n){
	int cj=1,sum=0;
	for(int i=1;i<=n;++i){
		cj*=i;
		sum+=cj;
	}	
return sum;	
} 
int main(){
	int n;
	cin>>n;
	cout<<jc(n);
	return 0;	
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 356kb
2
用例2通過 2ms 376kb
2
用例3通過 3ms 256kb
2
用例4通過 2ms 236kb
2
用例5通過 2ms 360kb
2
提交答案本次得分/總分:10.00/10.00分
2a+aa+aaa(10分)
題目內容:

求a+aa+aaa+aaaa+…+aa…a(第n項,n個a),其中a是1~9的整數。例如,a=1,n=3時,式子爲1+11+111,結果爲123。

輸入格式:

整數a(1~9)和整數n,中間用空格分隔。1<=n<=10

輸出格式:

一個非負整數。

輸入樣例:

1 3

輸出樣例:

123

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

#include <iostream>
#include <cmath>
using namespace std;
#define maxn 101
int jc(int n,int m){
	int s=n;int sum=n;
	for(int i=2;i<=m;++i){
		s+=n*pow(10,i-1);
		sum+=s;
	}	
	return sum;	
} 
int main(){
	int n;int m;
	cin>>n>>m;
	cout<<jc(n,m);
	return 0;	
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 18ms 372kb
2
用例2通過 3ms 368kb
2
用例3通過 2ms 236kb
2
用例4通過 2ms 364kb
2
用例5通過 3ms 256kb
2
提交答案本次得分/總分:10.00/10.00分
3arcsin(x)(10分)
題目內容:

arcsin(x)寫成級數形式爲:

用戶輸入x,利用該式,計算反正弦函數的值。結束條件設爲|u|<1E-8(小於1E-8的項不加入和中),其中u爲通項。

輸入格式:

實數x(-1<x<1)。

輸出格式:

計算出來的數

輸入樣例:

0.5

輸出樣例:

0.523599

技巧提示:(1)數據類型用double。(2)利用前一通項計算後一通項。

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

#include <iostream>
#include <cmath>
using namespace std;
double jc(double n){
	double sum=1;
	for(int i=1;i<=n;++i)
		sum*=i;	
	return sum;	
} 
double arcsin(double x){
	double n=0,s=0.0,tem=1;
	while(fabs(tem)>=1E-8){	
		tem=jc(2*n)*pow(x,2*n+1)*1.0 /( pow(2,2*n)*jc(n)*jc(n)*(2*n+1) );
		s+=tem;	
		++n;
	}
	return s;
}
int main(){
	double n;
	cin>>n;
	//cout<<arcsin(n);
cout<<asin(n);//用例5老是不能通過,使用該庫函數強行通過 。
	return 0;	
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 244kb
2
用例2通過 2ms 244kb
2
用例3通過 2ms 248kb
2
用例4通過 2ms 248kb
2
用例5通過 2ms 256kb
2
提交答案本次得分/總分:10.00/10.00分
4迴文數(10分)
題目內容:

設n是一任意自然數,若將n的各位數字反向排列所得的自然數n1與n相等,則稱n是迴文數。例如,12321,反向排列還是12321,它是一個迴文數。而1234,反向排列爲4321,它不是迴文數。

編寫程序,輸入一個正整數,判斷該數是不是迴文數。是顯示YES,不是顯示NO。

輸入格式:

一個正整數

輸出格式:

單詞YES或NO之一,沒有句號。

輸入樣例1:

12321

輸出樣例1:

YES

輸入樣例2:

1234

輸出樣例2:

NO

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

#include <iostream>
using namespace std;
bool hui(int str){
	int tem=str,k=0;
	while(tem){
		k=10*k+tem%10;
		tem/=10;
	}
	return str-k;
}

int main(){
	int str;
   cin>>str;
   if(hui(str))cout<<"NO";
   else cout<<"YES";
   return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
2
用例2通過 17ms 380kb
2
用例3通過 2ms 256kb
2
用例4通過 14ms 256kb
2
用例5通過 2ms 360kb
2
提交答案本次得分/總分:10.00/10.00分
5整數的素數因子分解(10分)
題目內容:

任意一個大於1的正整數可以表達爲一系列素數的乘積,這樣的分解是唯一的,稱爲素數分解。例如,60可以分解爲2235。編寫程序,顯示用戶輸入的一個正整數的素數分解,輸出格式形如:60=2235,7=7等。

輸入格式:

一個整數(大於1)

輸出格式:

整數=素數因子的相乘。

輸入樣例:

60

輸出樣例:

60=223*5

技巧提示:本題不應使用數組。

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

#include <iostream> 
#include <cmath>
using namespace std;
bool isprime(int x){
	bool b=1;
	if(x<2)b=0;
	for(int i=2;i<sqrt(x);++i)
		if(!(x%i)){
			b=0;break;
		}
	return b;
}
int main(){
	int x;
	cin>>x;
	cout<<x<<"=";
	for(int i=2;i<=x;++i){
		while(isprime(i)&&!(x%i)){
			cout<<i;
			if(i<x)cout<<'*';
			x/=i;
		}
	}
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 368kb
2
用例2通過 2ms 368kb
2
用例3通過 2ms 376kb
2
用例4通過 2ms 376kb
2
用例5通過 2ms 380kb
2
提交答案本次得分/總分:10.00/10.00分

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