Python\C++| CCFCSP 第一題(全)

試題編號: 201803-1
試題名稱: 跳一跳
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。
  簡化後的跳一跳規則如下:玩家每次從當前方塊跳到下一個方塊,如果沒有跳到下一個方塊上則遊戲結束。
  如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分;跳到方塊中心時,若上一次的得分爲1分或這是本局遊戲的第一次跳躍則此次得分爲2分,否則此次得分比上一次得分多兩分(即連續跳到方塊中心時,總得分將+2,+4,+6,+8...)。
  現在給出一個人跳一跳的全過程,請你求出他本局遊戲的得分(按照題目描述的規則)。

輸入格式

  輸入包含多個數字,用空格分隔,每個數字都是1,2,0之一,1表示此次跳躍跳到了方塊上但是沒有跳到中心,2表示此次跳躍跳到了方塊上並且跳到了方塊中心,0表示此次跳躍沒有跳到方塊上(此時遊戲結束)。

輸出格式

  輸出一個整數,爲本局遊戲的得分(在本題的規則下)。

樣例輸入

1 1 2 2 2 1 1 2 2 0

樣例輸出

22

數據規模和約定

  對於所有評測用例,輸入的數字不超過30個,保證0正好出現一次且爲最後一個數字。

 

代碼

 

#include <iostream>

using namespace std;

int main()
{
   int tt,pre=1;
   long long ans=0,score=2;
   while(1)
   {
       cin>>tt;
       if(tt==0)
       break;
       if(pre==1&&tt==1)
       ans+=1;
       else if (pre==1&&tt==2)
          ans+=score;
       else if(pre==2&&tt==2)
       {
           score+=2;
           ans+=score;
       }
       else if(pre==2&&tt==1)
       {
           ans+=1;
           score=2;
       }
       pre=tt;
   }
   cout<<ans<<endl;
    return 0;
}
試題編號: 201712-1
試題名稱: 最小差值
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。

輸入格式

  輸入第一行包含一個整數n。
  第二行包含n個正整數,相鄰整數之間使用一個空格分隔。

輸出格式

  輸出一個整數,表示答案。

樣例輸入

5
1 5 4 8 20

樣例輸出

1

樣例說明

  相差最小的兩個數是5和4,它們之間的差值是1。

樣例輸入

5
9 3 6 1 3

樣例輸出

0

樣例說明

  有兩個相同的數3,它們之間的差值是0.

數據規模和約定

  對於所有評測用例,2 ≤ n ≤ 1000,每個給定的整數都是不超過10000的正整數。

 

代碼

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int tt[1005];
int main()
{
   int n,minn;
   while(cin>>n)
   {
       minn=1000000;
      for(int i=0;i<n;i++)
        cin>>tt[i];
        for(int i=0;i<n;i++)
         for(int j=0;j<n;j++)
         {
             if(i!=j)
               {
                  int c=abs(tt[i]-tt[j]);
                  minn=min(minn,c);
               }
         }
       cout<<minn<<endl;
   }
    return 0;
}

 

問題描述

試題編號: 201709-1
試題名稱: 打醬油
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  小明帶着N元錢去買醬油。醬油10塊錢一瓶,商家進行促銷,每買3瓶送1瓶,或者每買5瓶送2瓶。請問小明最多可以得到多少瓶醬油。

輸入格式

  輸入的第一行包含一個整數N,表示小明可用於買醬油的錢數。N是10的整數倍,N不超過300。

輸出格式

  輸出一個整數,表示小明最多可以得到多少瓶醬油。

樣例輸入

40

樣例輸出

5

樣例說明

  把40元分成30元和10元,分別買3瓶和1瓶,其中3瓶送1瓶,共得到5瓶。

樣例輸入

80

樣例輸出

11

樣例說明

  把80元分成30元和50元,分別買3瓶和5瓶,其中3瓶送1瓶,5瓶送2瓶,共得到11瓶。

 

 

#include <iostream>

using namespace std;

int main()
{
     int n;
     while(cin>>n)
     {
         int ans=0;
         ans=(n/50)*7;
         n-=(n/50)*50;
         ans+=(n/30)*4;
         n-=(n/30)*30;
         ans+=(n/10);
         cout<<ans<<endl;
     }
    return 0;
}

問題描述

試題編號: 201403-1
試題名稱: 相反數
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  有 N 個非零且各不相同的整數。請你編一個程序求出它們中有多少對相反數(a 和 -a 爲一對相反數)。

輸入格式

  第一行包含一個正整數 N。(1 ≤ N ≤ 500)。
  第二行爲 N 個用單個空格隔開的非零整數,每個數的絕對值不超過1000,保證這些整數各不相同。

輸出格式

  只輸出一個整數,即這 N 個數中包含多少對相反數。

樣例輸入

5
1 2 3 -1 -2

樣例輸出

2

果然是越來越菜

#include <iostream>

using namespace std;
int tt[505];
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
            cin>>tt[i];
        int ans=0;
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
                if(tt[i]*-1==tt[j])
                    ans++;
            cout<<ans<<endl;
    }
    return 0;
}
import sys
a=sys.stdin.readline()
a=a.strip()
b=sys.stdin.readline()
b=b.strip()
tt=b.split(" ")
tt=[int(v) for v in tt]
i=0
for s in tt :
    if (s*-1) in tt :
        i+=1
i/=2
c=int(i)
sys.stdout.write(str(c))

問題描述

試題編號: 201409-1
試題名稱: 相鄰數對
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。

輸入格式

  輸入的第一行包含一個整數n,表示給定整數的個數。
  第二行包含所給定的n個整數。

輸出格式

  輸出一個整數,表示值正好相差1的數對的個數。

樣例輸入

6
10 2 6 3 7 8

樣例輸出

3

樣例說明

  值正好相差1的數對包括(2, 3), (6, 7), (7, 8)。

評測用例規模與約定

  1<=n<=1000,給定的整數爲不超過10000的非負整數。

#include <iostream>
#include <cstdlib>
using namespace std;
int tt[1005];
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
            cin>>tt[i];
        int ans=0;
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
                if(abs(tt[i]-tt[j])==1)
                    ans++;
            cout<<ans<<endl;
    }
    return 0;
}
import sys
a=sys.stdin.readline()
a=a.strip()
b=sys.stdin.readline()
b=b.strip()
tt=b.split(" ")
tt=[int(v) for v in tt]
i=0
for s in tt :
    if (s+1) in tt  :
        i+=1
    if (s-1) in tt  :
        i+=1
i/=2
c=int(i)
sys.stdout.write(str(c))

問題描述

試題編號: 201412-1
試題名稱: 門禁系統
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  濤濤最近要負責圖書館的管理工作,需要記錄下每天讀者的到訪情況。每位讀者有一個編號,每條記錄用讀者的編號來表示。給出讀者的來訪記錄,請問每一條記錄中的讀者是第幾次出現。

輸入格式

  輸入的第一行包含一個整數n,表示濤濤的記錄條數。
  第二行包含n個整數,依次表示濤濤的記錄中每位讀者的編號。

輸出格式

  輸出一行,包含n個整數,由空格分隔,依次表示每條記錄中的讀者編號是第幾次出現。

樣例輸入

5
1 2 1 1 3

樣例輸出

1 1 2 3 1

評測用例規模與約定

  1≤n≤1,000,讀者的編號爲不超過n的正整數。

#include <iostream>
#include <cstring>
using namespace std;
int tt[1005];
int main()
{
    int n;
    while(cin>>n)
    {
        int ss;
       memset(tt,0,sizeof(tt));
       for(int i=0;i<n;i++)
       {
            cin>>ss;
            cout<<++tt[ss]<<" ";
       }
       cout<<endl;
    }
    return 0;
}

問題描述

試題編號: 201503-1
試題名稱: 圖像旋轉
時間限制: 5.0s
內存限制: 256.0MB
問題描述:

問題描述

  旋轉是圖像處理的基本操作,在這個問題中,你需要將一個圖像逆時針旋轉90度。
  計算機中的圖像表示可以用一個矩陣來表示,爲了旋轉一個圖像,只需要將對應的矩陣旋轉即可。

輸入格式

  輸入的第一行包含兩個整數nm,分別表示圖像矩陣的行數和列數。
  接下來n行每行包含m個整數,表示輸入的圖像。

輸出格式

  輸出m行,每行包含n個整數,表示原始矩陣逆時針旋轉90度後的矩陣。

樣例輸入

2 3
1 5 3
3 2 4

樣例輸出

3 4
5 2
1 3

評測用例規模與約定

  1 ≤ n≤ 1,000,矩陣中的數都是不超過1000的非負整數。

 

#include <iostream>
#include <cstring>
using namespace std;
int tt[1005][1005];
int main()
{
    int m,n;
    while(cin>>m>>n)
    {
     for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
           cin>>tt[i][j];
      for(int j=n-1;j>=0;j--)
     {
        for(int i=0;i<m;i++)
     {
         cout<<tt[i][j]<<" ";
     }
     cout<<endl;
     }
    }
    return 0;
}

問題描述

試題編號: 201509-1
試題名稱: 數列分段
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定一個整數數列,數列中連續相同的最長整數序列算成一段,問數列中共有多少段?

輸入格式

  輸入的第一行包含一個整數n,表示數列中整數的個數。
  第二行包含n個整數a1, a2, …, an,表示給定的數列,相鄰的整數之間用一個空格分隔。

輸出格式

  輸出一個整數,表示給定的數列有多個段。

樣例輸入

8
8 8 8 0 12 12 8 0

樣例輸出

5

樣例說明

  8 8 8是第一段,0是第二段,12 12是第三段,倒數第二個整數8是第四段,最後一個0是第五段。

評測用例規模與約定

  1 ≤ n ≤ 1000,0 ≤ ai ≤ 1000。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int pre,ss;
        int ans=1;
        cin>>pre;
        for(int i=1; i<n; i++)
        {
            cin>>ss;
            if(ss!=pre)
            {
                pre=ss;
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
試題編號: 201512-1
試題名稱: 數位之和
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定一個十進制整數n,輸出n的各位數字之和。

輸入格式

  輸入一個整數n

輸出格式

  輸出一個整數,表示答案。

樣例輸入

20151220

樣例輸出

13

樣例說明

  20151220的各位數字之和爲2+0+1+5+1+2+2+0=13。

評測用例規模與約定

  所有評測用例滿足:0 ≤ n ≤ 1000000000。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int ans=0;
        while(n)
        {
            ans+=n%10;
            n/=10;
        }
        cout<<ans<<endl;
    }
    return 0;
}
試題編號: 201604-1
試題名稱: 折點計數
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定n個整數表示一個商店連續n天的銷售量。如果某天之前銷售量在增長,而後一天銷售量減少,則稱這一天爲折點,反過來如果之前銷售量減少而後一天銷售量增長,也稱這一天爲折點。其他的天都不是折點。如下圖中,第3天和第6天是折點。

  給定n個整數a1, a2, …, an表示銷售量,請計算出這些天總共有多少個折點。
  爲了減少歧義,我們給定的數據保證:在這n天中相鄰兩天的銷售量總是不同的,即ai-1≠ai。注意,如果兩天不相鄰,銷售量可能相同。

輸入格式

  輸入的第一行包含一個整數n
  第二行包含n個整數,用空格分隔,分別表示a1, a2, …, an

輸出格式

  輸出一個整數,表示折點出現的數量。

樣例輸入

7
5 4 1 2 3 6 4

樣例輸出

2

評測用例規模與約定

  所有評測用例滿足:1 ≤ n ≤ 1000,每天的銷售量是不超過10000的非負整數。

#include <iostream>
#include <cstring>
using namespace std;
int tt[1005];
int main()
{
    int n;
    while(cin>>n)
    {
        int pre,ss;
        int ans=0;
        for(int i=0; i<n; i++)
        {
            cin>>tt[i];
        }
        for(int i=1;i<n-1;i++)
        {
            if((tt[i]-tt[i-1])*(tt[i+1]-tt[i])<0)
                ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}
試題編號: 201609-1
試題名稱: 最大波動
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  小明正在利用股票的波動程度來研究股票。小明拿到了一隻股票每天收盤時的價格,他想知道,這隻股票連續幾天的最大波動值是多少,即在這幾天中某天收盤價格與前一天收盤價格之差的絕對值最大是多少。

輸入格式

  輸入的第一行包含了一個整數n,表示小明拿到的收盤價格的連續天數。
  第二行包含n個正整數,依次表示每天的收盤價格。

輸出格式

  輸出一個整數,表示這隻股票這n天中的最大波動值。

樣例輸入

6
2 5 5 7 3 5

樣例輸出

4

樣例說明

  第四天和第五天之間的波動最大,波動值爲|3-7|=4。

評測用例規模與約定

  對於所有評測用例,2 ≤ n ≤ 1000。股票每一天的價格爲1到10000之間的整數。

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
   int n;
    while(cin>>n)
    {
        int pre,ss;
        int ans=0;
        cin>>pre;
     for(int i=1;i<n;i++)
     {cin>>ss;
    ans=max(ans,abs(ss-pre));
    pre=ss;
     }
    cout<<ans<<endl;
    }
    return 0;
}

問題描述

試題編號: 201612-1
試題名稱: 中間數
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  在一個整數序列a1, a2, …, an中,如果存在某個數,大於它的整數數量等於小於它的整數數量,則稱其爲中間數。在一個序列中,可能存在多個下標不相同的中間數,這些中間數的值是相同的。
  給定一個整數序列,請找出這個整數序列的中間數的值。

輸入格式

  輸入的第一行包含了一個整數n,表示整數序列中數的個數。
  第二行包含n個正整數,依次表示a1, a2, …, an

輸出格式

  如果約定序列的中間數存在,則輸出中間數的值,否則輸出-1表示不存在中間數。

樣例輸入

6
2 6 5 6 3 5

樣例輸出

5

樣例說明

  比5小的數有2個,比5大的數也有2個。

樣例輸入

4
3 4 6 7

樣例輸出

-1

樣例說明

  在序列中的4個數都不滿足中間數的定義。

樣例輸入

5
3 4 6 6 7

樣例輸出

-1

樣例說明

  在序列中的5個數都不滿足中間數的定義。

評測用例規模與約定

  對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。

想不起來當時咋寫的了

#include <iostream>
#include <algorithm>
using namespace std;
int tt[1005];
int main()
{
   int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
            cin>>tt[i];
        sort(tt,tt+n);
        int a,b;
        int f=0;
        for(int i=0;i<n;i++)
        {
     a = upper_bound(tt,tt+n,tt[i])-tt;
     b = lower_bound(tt,tt+n,tt[i])-tt;
     if(n-a==b)
     {
         f=1;
         cout<<tt[i]<<endl;
         break;
     }
        }
    if(f==0)
        cout<<"-1"<<endl;
    }
    return 0;
}

 

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