1. 程式人生 > >《演算法筆記》2.4小節

《演算法筆記》2.4小節

有種水文章數的感覺...⊙﹏⊙‖∣ 有些題沒有圖片..不能怪我...Codeup上也沒有...哈哈哈  

問題 A: 例題5-1-1 連續自然數求和

題目描述

求1+2+3+...+100,即求

要求用while語句實現

輸入

輸出

要求的和,末尾輸出換行。

樣例輸入

樣例輸出

5050
#include<iostream>
using namespace std;
int main()
{   
    int a=0,i=1;
    while(i<=100){
 
        a+=i;
        i++;
    }
    cout<<a<<endl;
}

問題 B: 例題5-1-2 連續自然數求和

題目描述

求1+2+3+...+100,即求

要求用do...while語句實現

輸入

輸出

計算結果,注意末尾輸出換行。

樣例輸入

樣例輸出

5050
#include<iostream>
using namespace std;
int main()
{   
    int a=0,i=1;
    do{
 
        a+=i;
        i++;
    }while(i<=100);
    cout<<a<<endl;
}

問題 C: 例題5-1-3 連續自然數求和

題目描述

求1+2+3+...+100,即求

要求用for語句實現

輸入

輸出

計算結果,末尾輸出換行。

樣例輸入

樣例輸出

5050
#include<iostream>
using namespace std;
int main()
{   
    int a=0;
    for(int i=1;i<=100;i++)
    a+=i;   
    cout<<a<<endl;
}

問題 D: 例題5-1-4 連續自然數求和

題目描述

輸入一個正整數N,求1+2+...+N,即求

要求在程式中使用break語句。 

輸入

要求輸入的資料一定是一個正整數。

輸出

計算的結果,連續N個自然數的和,末尾輸出換行。

樣例輸入

100

樣例輸出

5050
#include<iostream>
using namespace std;
int main()
{   
    int a=0,n;
    cin>>n;
    for(int i=1;i<=n;i++)
    a+=i;   
    cout<<a<<endl;
}

問題 E: 例題5-1-5 連續自然數求和

題目描述

程式設計實現求1+2+3+...和的程式,要求得到使使和數大於1000的最小正整數。

輸入

輸出

輸出使1+2+3+...+N>1000的最小正整數N,末尾輸出換行。

樣例輸入

樣例輸出

45
#include<iostream>
using namespace std;
int main()
{   
    int a=0,i;
    for(i=1;a<=1000;i++)
    a+=i;   
    cout<<i-1<<endl;
}

問題 F: 例題5-6 矩陣輸出

題目描述

輸出以下4*5的矩陣

  1  2  3  4  5

  2  4  6  8 10

  3  6  9 12 15

  4  8 12 16 20

要求使用迴圈實現,注意每行輸出5個數字,每個數字佔3個字元的寬度,右對齊。

輸入

輸出

每行輸出5個數字,每個數字佔3個字元的寬度,右對齊。

樣例輸入

樣例輸出

  1  2  3  4  5
  2  4  6  8 10
  3  6  9 12 15
  4  8 12 16 20
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{   
    for(int i=1;i<=4;i++)
    {   for(int j=1;j<=5;j++)
        {
            cout<<setw(3)<<i*j;
        }
        cout<<endl;
    }       
}

問題 G: 例題5-7 求圓周率pi的近似值

題目描述

用如下公式

求圓周率PI的近似值,直到發現某一項的絕對值小於10-6為止(該項不累加)。

要求輸出的結果總寬度佔10位,其中小數部分為8位。

程式中使用浮點型資料時,請定義為雙精度double型別。

如果需要計算絕對值,可以使用C語言數學庫提供的函式fabs,如求x的絕對值,則為fabs(x).

輸入

輸出

PI=圓周率的近似值

輸出的結果總寬度佔10位,其中小數部分為8位。

末尾輸出換行。

樣例輸入

樣例輸出

PI=3.14159065
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{   
    double p=0,a=1,b=1;
    int flag=1;
    while(fabs(a)>=1e-6)
    {
        p=p+a;
        b+=2;
        flag=-flag; 
        a=flag/b;
         
         
    }
     
     
    cout<<"PI="<<setw(10)<<fixed<<setprecision(8)<<p*4<<endl;
     
}

問題 H: 例題5-8 Fibonacci數列

題目描述

輸入一個正整數n,求Fibonacci數列的第n個數。Fibonacci數列的特點:第1,2個數為1,1。從第3個數開始,概述是前面兩個數之和。即:

要求輸入的正整數n不超過50.

輸入

一個不超過50的正整數

輸出

Fibonacci數列的第n個數,末尾輸出換行。

樣例輸入

20

樣例輸出

6765
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{   
    int n,a=1,b=1,c;
    cin>>n;
    if(n==1||n==2){
        cout<<1;
    }
    else{
            for(int i=3;i<=n;i++)
            {   
                c=a+b;
                a=b;
                b=c;
                 
            }
             
            cout<<c<<endl;
    }
 
     
}

問題 I: 習題5-10 分數序列求和

題目描述

有如下分數序列

求出次數列的前20項之和。

請將結果的資料型別定義為double型別。

輸入

輸出

小數點後保留6位小數,末尾輸出換行。

樣例輸入

樣例輸出

32.660261
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	double sum=0,a=1,b=2,c;
	for(int i=1;i<=20;i++)
	{
		sum=sum+b/a;
		c=a;
		a=b;
		b=c+b;
		
			
	}
	cout<<fixed<<setprecision(6)<<sum<<endl;
	return 0;
}