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;
}

 

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