noip第16課作業


1. 猴子吃桃

【問題描述】

猴子第一天摘了若干個桃子,當即吃了一半,還不解饞,又多吃了一個;第二天,吃剩下的桃子的一半,還不過癮,又多吃了一個;以后每天都吃前一天剩下的一半多一個,到第10天想再吃時,只剩下一個桃子了。問第一天共摘了多少個桃子?

#include <iostream>
using namespace std;
int peach(int n)
{
    if (n == 10)
        return 1;
    else
        return 2 * (peach(n + 1)+1);
}
int main()
{
    int sum;
    sum=peach(1);
    cout << sum << endl;
    return 0; 
} 

2.乘火車

【問題描述】

火車從始發站(稱為第1站)開出,在始發站上車的人數為a,然后到達第2站,在第2站有人上、下車,但上、下車的人數相同,因此在第2站開出時(即在到達第3站之前)車上的人數保持為a人。從第3站起(包括第3站)上、下車的人數有一定規律:上車的人數都是前兩站上車人數之和,而下車人數等於上一站上車人數,一直到終點站的前一站(第n-1站),都滿足此規律。現給出的條件是:共有n個車站,始發站上車的人數為a,最后一站下車的人數是m(全部下車)。試問第x站開出時車上的人數是多少? 
【輸入格式】: —行四個整數a, n, m和x (中間用空格隔開)

0 <= a <= 10, 3 <= x < n <= 15, 0 <= m <= 10000。
【輸出格式】 —行一個整數(從x站開出時車上的人數)

【樣例輸入】

  4  6   32   4

【樣例輸出】

  18

#include <iostream>
using namespace std;
int b[20]= {0,1,1};
int main() {
    //a上車人數  n共有n個車站
    //m最后一站車上的人數 
    //x第幾站開出 
     
    int a,n,m,x,i,k=0;
    cin >> a >> n >> m >> x;
    
    if(x==1) {
        cout << a;
        return 0;
    }
    for(i=3; i<20; i++){
        b[i]=b[i-1]+b[i-2];
    }
    if(n>4){
        k=(m-(b[n-3]+1)*a)/(b[n-2]-1); 
    }
    cout << (b[x-1]-1)*k+(b[x-2]+1)*a;
    return 0;
}

1.紙的折痕

【問題描述】

將一張長方形的紙對折,可得到一條折痕,繼續對折,對折時每次折痕與上次的折痕保持平行,連續對折三次后,可得到7條折痕,那么對折n次,可得到幾條折痕?

【輸入格式】一個整數n,表示對折的次數。

【輸出格式】輸出得到折痕的數目。

【樣例輸入】

3

【樣例輸出】

7

#include<iostream>
using namespace std; 
int main(){
    int n, a[100]={0};
    int m = 2;
    cin >> n;
    a[1] = 1;
    for(int i = 2; i <= n; i++){
        a[i] = a[i-1] + m; 
        m = m * 2;
    }
    cout << a[n] << endl;
    return 0;
}

2.平面分割

【問題描述】

同一平面內有n(n≤500)條直線,已知其中p(p≥2)條直線相交於同一點,則這n條直線最多能將平面分割成多少個不同的區域?

【輸入格式】

 兩個整數n(n≤500)和p(2≤p≤n)。

【輸出格式】

  一個正整數,代表最多分割成的區域數目。

【輸入樣例】

12  5

【輸出樣例】

73

#include<iostream>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    int total=2*m;
    for (int i=m+1;i<=n;i++)
    total+=i;
    cout<<total;
    return 0; 
}

3.Catalan數

【問題描述】

Catalan數首先是由Euler在精確計算對凸n邊形的不同的對角三角形剖分的個數問題時得到的,它經常出現在組合計數問題中。

問題的提出:在一個凸n邊形中,通過不相交於n邊形內部的對角線,把n邊形拆分成若干三角形,不同的拆分數目用hn表示,hn即為Catalan數。例如五邊形有如下五種拆分方案(如下圖),故h5=5。求對於一個任意的凸n邊形相應的hn

 

【輸入樣例】

10

【輸出樣例】

1430

#include <iostream>
using namespace std;
int a[100];
int f(int x){
    int sum=0;
    if (a[x]!=0){
        return a[x];
    }else{
        for (int i=2;i<=x-1;i++){
            sum=sum+f(i)*f(x-i+1);
        }
        return a[x]=sum;
    }
}
int main(){
    int n;
    a[2]=1;
    a[3]=1;
    cin>>n;
    cout<<f(n);
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM