码迷,mamicode.com
首页 > 其他好文 > 详细

CSP 201512 | 201604考试题目

时间:2019-11-11 21:59:12      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:计算   问题   思路   空格   count   描述   roman   等于   scanf   

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("\n");
    for(i=0; i<NUM1; i++)
    {
        for(j=0; j<NUM2; j++)
        {
           printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    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\n", count);

    return 0;
}

 

 

CSP 201512 | 201604考试题目

标签:计算   问题   思路   空格   count   描述   roman   等于   scanf   

原文地址:https://www.cnblogs.com/CoffeeSoul/p/11834044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!