学習ノート『コンピュータプログラム設計C++』第5週中級練習

35440 ワード

第5週中級練習
学術の誠実さの条項に基づいて、私はこの宿題が本人が独立して完成したことを保証します.
お知らせ:
1.今回の作業はOnline Judgeの問題に属し、提出後、システムが即時に採点する.
2.学生は宿題の締め切り時間までに回数を問わず答えを提出することができ、システムはその中の最高点を最終成績とする.
1比較文字列(大文字と小文字を区別しない)(10点)テーマ内容:
関数を記述し、2つの文字列str 1、str 2のサイズ(大文字と小文字を区別しない)を比較し、前者は1、後者は1、等しいは0を返します.
メイン関数を作成し、2つの文字列を入力し、関数の比較を呼び出し、戻り値を出力します.文字列の長さは100を超えています.
入力形式:
1行、2文字列をスペースで区切ります.
出力フォーマット:
1,−1,0の3つの整数の1つ.
サンプルを入力:
four for
出力サンプル:
1
時間制限:500 msメモリ制限:32000 kb C++
#include 
using namespace std;
int comstr(char * s1,char * s2){
	if(!(*s1) &&!(*s2))return 0;
	if(*s1<='Z')*s1+=32;
	if(*s2<='Z')*s2+=32;
	if(*s1-*s2>0)return 1;
	if(*s1-*s2<0)return -1;
	s1++;s2++;
	comstr(&*s1,&*s2);
}
int main(){
	char s1[1000],s2[1000];
	cin>>s1>>s2;
	cout<<comstr(s1,s2);
	return 0;
}

用例試験結果運転時間占有メモリ提示スコア用例1 2 ms 364 kb 2用例2 21 ms 376 kb 1用例3 2 ms 364 kb 1用例4通過2 ms 372 kb 1用例5通過2 ms 376 kb 1用例6通過2 ms 372 kb 1用例7通過2 ms 364 kb 1用例8通過3 ms 364 kb 1用例9通過2 ms 364 kb 1提出解答今回スコア/総得点:10.00/10.00分2二分法解方程式(10分)テーマ内容:
方程式2 x 3−4 x 2+3 x−6=0の[−10,10]間のルートを二分法で求める関数を記述する.|f(x)|
二分法:区間[a,b]に連続してf(a)・f(b)<0の関数y=f(x)について、関数f(x)の零点がある区間を絶えず二分することにより、区間の2つの端点の距離を徐々に零点に近づけ、さらに零点近似値を得る方法.
メイン関数を作成し、区間の精度を入力し、関数を呼び出してルートを求め、戻り値を表示します.データ型double.
入力形式:
1行、3つの実数、前の2つは区間の左右の端点で、3つ目は精度です.
出力フォーマット:
近似ルートを表す実数.
サンプルを入力:
-10 10 0.00001
出力サンプル:
2
時間制限:500 msメモリ制限:32000 kb C++
#include 
using namespace std;
double eps,fx1,fx2;
double f(double x){
	return 2*x*x*x-4*x*x+3*x-6;
}
double abs(double x){
	if(x<0)x=0-x;
	return x;
}
void printx(double x1,double x2){
	double x0=(x1+x2)/2;
	double fx0=f(x0);
	if(abs(fx0)<=eps){
		cout<<x0;
		return;
	}
		if (fx0*fx1<0){
			x2=x0;
			fx2=fx0;
		}
		else{
			x1=x0;
			fx1=fx0;
		}
	printx(x1,x2);
}
int main()
{
	double x1,x2;
	cin>>x1>>x2>>eps;
	fx1=f(x1);
	fx2=f(x2);
	printx(x1,x2);
}

用例試験結果運転時間占有メモリ提示得点用例1 2 ms 228 kb 2用例2通過2 ms 372 kb 2用例3通過15 ms 360 kb 2用例4通過7 ms 232 kb 2用例5通過14 ms 356 kb 2提出解答今回の得点/総得点:10.00/10.00分3ニュートン法解方程式(10分)問題内容:
関数を編纂して、ニュートン法で方程式f(x)=xを求めます³+2x²+3 x+4=0 x 0付近のルート.要求|f(x)|
k=1,2,3,…
メイン関数を作成し、初期ルートと精度を入力し、関数を呼び出してルートを求め、戻り値を出力します.データ型double.数学ライブラリ関数は使用できません.
入力:初期ルートx 0と精度epsを入力します.
出力:実数を出力します.
【入出力サンプル】
入力:
1 0.0001
出力:
-1.65064
ヒント:f(x)、導関数、絶対値を求め、関数として定義します.
時間制限:500 msメモリ制限:32000 kb C++

```cpp
#include 
using namespace std;
double fabs(double x){
	if(x<0)x=0-x;
	return x;
}
double f(double x){
	return x*x*x+2*x*x+3*x+4;
}
double f1(double x){
	return 3*x*x+4*x+3;
}
double outqs(double x,double eps) {
	double f0=f(x)/f1(x);
	while(fabs(f(x))>eps){
             x-=f0;
             f0=f(x)/f1(x);
}
return x;
}
int main(){
	double x=1,eps=0.0001;
	cin>>x>>eps;
	cout<<outqs(x,eps)<<endl;
	return 0;
}

      	    	    	  	  
  1  	2ms	256kb	
2
  2  	2ms	364kb	
2
  3  	2ms	364kb	
2
  4  	3ms	256kb	
2
  5  	2ms	360kb	
2
        /  :10.00/10.00 
4  、  、  (10 )
    :

            (  -9999    )、          、            (    )。

     ,        、     。       100 ,    。

    :

  , 1         , -9999  ; 2   5       。       。

    :

5 ,            ,       -1。

    :

2 1 3 4 5 -9999

2 3 4 -10 10

    :

1

2

3

-1

-1

    :500ms    :32000kb
C++

```cpp
#include
using namespace std;
void swap(int *a,int *b){
	int t=*a;
	if(*a>*b){
		*a=*b;
		*b=t;
	}
}
void sort(int a[],int n){
	for(int i=1;ir)return 0;
	int m=l+(r-l)/2;
	if(t==a[m])return m;
	if(t>a[++i];
}while(a[i]!=-9999);
for(int i=0;i<5;++i)
cin>>b[i];
sort(a,i);
for(int j=0;j<5;++j)
cout<

用例試験結果実行時間占有メモリ提示スコア用例1 3 ms 256 kb 5用例2 2 ms 360 kb 5で回答を提出今回のスコア/総点:10.00/10.00分5単語ソート(10点)問題内容:
入力したいくつかの単語を辞書で並べ替え、大文字と小文字を区別しないプログラムを作成します.文字列の比較、コピー、大文字と小文字の変換、ソートなどの作業は関数で実現する必要があります.
メイン関数に単語を入力し、関数ソートを呼び出し、メイン関数に結果を出力します.文字列の数は100個を超えず、各単語の長さは20を超えない.
システムの文字列を使用してライブラリ関数を処理することはできません.標準テンプレートライブラリのクラスと関数を使用することはできません.
入力形式:
2行:1行目の単語数n、2行目のn単語をスペースで区切ります.
出力フォーマット:
n行、各行に1つの単語.
サンプルを入力:
5
sin cos log exp sqrt
出力サンプル:
cos
exp
log
sin
sqrt
時間制限:500 msメモリ制限:32000 kb C++
#include
using namespace std;
int is(char s){
	int b=0;
	if(s>='0'&&s<='9')b=1;
	return b;
}
int main(){
	int n=110;
	char str[n];
	cin.getline(str,n);
	int i=0;
	int a[n],j=0,t=0;bool jw=0,fh=0;
	while(str[i]){
		if(str[i]=='-'&& is(str[i+1]))fh=1;
		if(is(str[i])){
			if(jw)t*=10;
			t+=str[i]-'0';
			if(is(str[i+1]) )jw=1;
			if(!is(str[i+1]) ){
				if(fh)t*=-1;
				a[j++]=t;
				t=0;fh=jw=0;
			}
		}
		++i;
	}
	for(int i=0;i<j-1;++i)
		cout<<a[i]<<" ";
	cout<<a[j-1];
	
    return 0;
}

用例試験結果運転時間占有メモリ提示スコア用例1 10 ms 256 kb 2用例2 14 ms 372 kb 2用例3 2 ms 256 kb 2用例4 3 ms 368 kb 2用例5 3 ms 368 kb 2で解答を提出今回のスコア/総得点:10.00/10.00分6識別数字(10点)問題内容:
関数を記述し、文字列内のすべての整数を出力します.正、負の数を考慮しなければならない.
メイン関数を作成し、スペース付き文字列を入力し、関数を呼び出して整数を出力します.
入力形式:
行は、文を表し、真ん中にスペースがあり、いくつかの整数がある可能性があります.
出力フォーマット:
1行、いくつかの整数で、1つのスペースで区切られ、末尾にスペースがありません.
注意:個々の記号は数値ではありませんが、-0は0、+0も0です.
サンプルを入力:
CHINA DAILY | Updated: 2020-03-21 07:57
出力サンプル:
2020 -3 -21 7 57
時間制限:500 msメモリ制限:32000 kb C++
#include
using namespace std;
int is(char s){
	int b=0;
	if(s>='0'&&s<='9')b=1;
	return b;
}
int main(){
	int n=110;
	char str[n];
	cin.getline(str,n);
	int i=0;
	int a[n],j=0,t=0;bool jw=0,fh=0;
	while(str[i]){
		if(str[i]=='-'&& is(str[i+1]))fh=1;
		if(is(str[i])){
			if(jw)t*=10;
			t+=str[i]-'0';
			if(is(str[i+1]) )jw=1;
			if(!is(str[i+1]) ){
				if(fh)t*=-1;
				a[j++]=t;
				t=0;fh=jw=0;
			}
		}
		++i;
	}
	for(int i=0;i<j-1;++i)
		cout<<a[i]<<" ";
	cout<<a[j-1];
	
    return 0;
}

用例試験結果運転時間占有メモリ提示スコア用例1 2 ms 228 kb 2用例2通過2 ms 372 kb 2用例3通過3 ms 228 kb 2用例4通過2 ms 356 kb 2用例5通過2 ms 256 kb 2提出解答今回のスコア/総得点:10.00/10.00分