CSP 201512 | 201604考试题目

Posted coffeesoul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP 201512 | 201604考试题目相关的知识,希望对你有一定的参考价值。

201512第一题

问题描述

给定一个十进制整数n,输出n的各位数字之和。

输入格式

输入一个整数n。

输出格式

输出一个整数,表示答案。

样例输入

20151220

样例输出

13

样例说明

20151220的各位数字之和为2+0+1+5+1+2+2+0=13。

评测用例规模与约定

所有评测用例满足:0 ≤ n ≤ 1000000000。

基本思路:

通过对数n依次求模取得个位数,用sum相加,相加之后再依次除以10,去掉已经相加最后一位。

代码实现

#include "stdio.h"
int main()
{
    int n, sum;
    scanf("%d",&n);
    sum=0;
    while(n)///表示n不等于0
    {
        sum+=n%10;///n%10就是个位数
        n=n/10;///除10就是去掉最后一位
    }
    printf("%d",sum);
    return 0;
}

201512第二题

问题描述

  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
  现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
  请注意:一个棋子可能在某一行和某一列同时被消除。

输入格式

  输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
  接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。

输出格式

输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。

样例输入

4 5
2 2 3 1 2
3 4 5 1 4
2 3 2 1 3
2 2 2 4 4

样例输出

2 2 3 0 2
3 4 5 0 4
2 3 2 0 3
0 0 0 4 4

样例说明

棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。

样例输入

4 5
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3

样例输出

2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0

样例说明

棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。

评测用例规模与约定

所有的评测用例满足:1 ≤ n, m ≤ 30

 

代码实现

#include <stdio.h>
int main()
{
    int NUM1;
    int NUM2;
    scanf("%d",&NUM1);
    scanf("%d",&NUM2);
    int a[NUM1][NUM2];
    int b[NUM1][NUM2];
    int i;
    int j;
    for(i=0; i<NUM1; i++)
    {
        for(j=0; j<NUM2; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0; i<NUM1; i++)
    {
        for(j=0; j<NUM2; j++)
        {
            b[i][j]=1;
        }
    }
    for(i=0; i<NUM1; i++)
    {
        for(j=0; j<NUM2; j++)
        {
            if(((j+2)<NUM2)&&(a[i][j]==a[i][j+1])&&(a[i][j]==a[i][j+2]))
            {
                b[i][j]=0;
                b[i][j+1]=0;
                b[i][j+2]=0;
            }
            if(((i+2)<NUM1)&&(a[i][j]==a[i+1][j])&&(a[i][j]==a[i+2][j]))
            {
                b[i][j]=0;
                b[i+1][j]=0;
                b[i+2][j]=0;
            }
        }
    }
    for(i=0; i<NUM1; i++)
    {
        for(j=0; j<NUM2; j++)
        {
            if(b[i][j]==0)
            {
                a[i][j]=0;
            }
        }
    }
    printf("
");
    for(i=0; i<NUM1; i++)
    {
        for(j=0; j<NUM2; j++)
        {
           printf("%d ",a[i][j]);
        }
        printf("
");
    }
    return 0;
}

 

201604

问题描述

  给定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 <stdio.h>

#define N 1000

int a[N];

int main()

{

    int n, i, count;

    // 读入数据

    scanf("%d", &n);

    for(i=0; i<n; i++)

        scanf("%d", &a[i]);

    // 计算折点

    count = 0;

    for(i=1; i<n-1; i++)

        if((a[i-1] < a[i] && a[i] > a[i+1]) || (a[i-1] > a[i] && a[i] < a[i+1]))

            count++;

    // 输出结果

    printf("%d
", count);

    return 0;
}

 

 

以上是关于CSP 201512 | 201604考试题目的主要内容,如果未能解决你的问题,请参考以下文章

CSP201604-1:折点计数

CSP201512-1: 数位之和

CCF CSP 201604-4 游戏

CCF CSP 201604-1 折点计数

CCF CSP 201604-2 俄罗斯方块

CCF CSP 201512-2 消除类游戏